Option Compare Database
Private WithEvents mListBox As Access.ListBox
Private mColWidths As New Collection
Private mClickedColumn As Integer
Private mClickedValue As String
Private Sub cmdAddCode_Click()
DoCmd.OpenTable "tblCodesDx"
End Sub
Private Sub cmdDxFilters_Click()
DoCmd.OpenTable "tblCodesDxFilter"
End Sub
Private Sub cmdRefresh_Click()
Call RefreshForm 'Private
End Sub
Private Sub Form_Load()
'====Make a list for lstDx of all diagnostics codes
Dim rs As DAO.Recordset, strList As String, Y As Long, rsD As DAO.Recordset
Me.Move 6000, 1000, 9000, 6000
CLB.Init Me.lstDx
Me.aa.SetFocus
Set rs = CurrentDb.OpenRecordset("SELECT * FROM tblCodesDx ORDER BY CodeDx")
Do Until rs.EOF
If strList = "" Then
strList = rs!CodeDx
Else
strList = strList & ";" & rs!CodeDx
End If
rs.MoveNext
Loop
Me.lstDx.ColumnCount = 4
Me.lstDx.ColumnWidths = "1in,1in,1in,1in"
Me.lstDx.RowSource = strList
rs.Close
Me.frlbl1.Caption = "All"
Me.frlbl1.Visible = True
'===Setup DxFilter Option Group
Set rsD = CurrentDb.OpenRecordset("SELECT * FROM tblCodesDxFilter ORDER BY DxFilter")
'===Hide all filter options
For Y = 2 To 9
Me("frlbl" & Y).Visible = False
Me("ck" & Y).Visible = False
Next Y
'===UnHide if allowed
Y = 2
Do Until rsD.EOF
Me("frlbl" & Y).Visible = True
Me("frlbl" & Y).Caption = rsD!dxfilter
Me("ck" & Y).Visible = True
rsD.MoveNext
Y = Y + 1
Loop
rsD.Close
Set rs = Nothing
Set rsD = Nothing
End Sub
Private Sub RefreshForm()
On Error GoTo RefreshErr
'Dim rsF As DAO.Recordset, strFilter As String
Me.frDxFilters = 1
Call Form_Load 'Private
RefreshExit:
Exit Sub
RefreshErr:
MsgBox "Forms!CodesDx: " & Err.Number & " - " & Err.Description
Resume RefreshExit
End Sub
Private Sub lstDx_Click()
MsgBox CLB.ClickedColumn
MsgBox CLB.ClickedColumnValue
End Sub
Private Sub frDxFilters_Click()
Dim rsListbox As String, strFilter As String, msql As String, rs As DAO.Recordset
'strFilter = Me.frDxFilters
strFilter = Me("frlbl" & Me.frDxFilters).Caption
If Me.frDxFilters = 1 Then
msql = "SELECT * FROM tblCodesDx ORDER BY CodeDx ASC;"
Else
msql = "SELECT * FROM tblCodesDx WHERE CodeDx Like '" & strFilter & "*' ORDER BY CodeDx ASC;"
End If
Set rs = CurrentDb.OpenRecordset(msql)
Do Until rs.EOF
If rsListbox = "" Then
rsListbox = rs!CodeDx
Else
rsListbox = rsListbox & ";" & rs!CodeDx
End If
rs.MoveNext
Loop
rs.Close
Set rs = Nothing
Me.lstDx.RowSource = rsListbox
End Sub
Private Sub Init(TheListBox As ListBox)
Set mListBox = TheListBox
mListBox.OnMouseDown = "[Event Procedure]"
loadColumnWidths
End Sub
Private Sub loadColumnWidths()
Dim aColWidths() As String
Dim colWidth As Variant
aColWidths = Split(mListBox.ColumnWidths, ";")
For Each colWidth In aColWidths
mColWidths.Add (CLng(colWidth))
Next colWidth
End Sub
Private Function GetClickedColumn(X As Single)
Dim TotalWidth As Single
Dim itm As Variant
Dim I As Integer
For Each itm In mColWidths
TotalWidth = TotalWidth + itm
If X < TotalWidth Then
GetClickedColumn = I
Exit Function
End If
I = I + 1
Next itm
End Function
Private Sub mListBox_MouseDown(Button As Integer, Shift As Integer, X As Single, Y As Single)
mClickedColumn = GetClickedColumn(X)
End Sub
Public Property Get ClickedColumn() As Integer
ClickedColumn = mClickedColumn
End Property
Public Property Get ClickedColumnValue() As Variant
ClickedColumnValue = mListBox.Column(Me.ClickedColumn)
End Property