S
sse1979
I'm trying to modify Allen Browne's Search form to use a multiselect list
box, but my listbox has only one column. I want to filter my list by
choosing multiple counties in my listbox (I also have other choices in text
boxes of state, date fields, etc.). I have pasted my code below for my
filter button. I'm not great with writing and deciphering code, but seem to
do ok sometimes in modifying, but I can't get this one. I've read through
many other posts here, and still can't figure it out.
Everything works till I put in the listbox. txtFilterCity is the name of my
lb. County is the name of the field I am querying. I also couldn't get the
reset button to clear the listbox, so help with that would be appreciated too.
Thank you in advance.
Option Compare Database
Option Explicit
Private Sub cmdFilter_Click()
'Purpose: Build up the criteria string form the non-blank search
boxes, and apply to the form's Filter.
'Notes: 1. We tack " AND " on the end of each condition so you can
easily add more search boxes; _
we remove the trailing " AND " at the end.
' 2. The date range works like this: _
Both dates = only dates between (both
inclusive. _
Start date only = all dates from this one onwards; _
End date only = all dates up to (and including
this one).
Dim strWhere As String 'The criteria string.
Dim lngLen As Long 'Length of the criteria string
to append to.
Const conJetDate = "\#mm\/dd\/yyyy\#" 'The format expected for dates
in a JET query string.
'Text field example. Use quotes around the value in the string.
If Not IsNull(Me.txtFilterCity) Then
strWhere = strWhere & "([County] = """ & Me.txtFilterCity & """) and "
End If
'Another text field example. Use Like to find anywhere in the field.
If Not IsNull(Me.txtFilterMainName) Then
strWhere = strWhere & "([State] Like ""*" & Me.txtFilterMainName &
"*"") AND "
End If
'Yes/No field and combo example. If combo is blank or contains "ALL", we
do nothing.
If Me.cboFilterIsCorporate = -1 Then
strWhere = strWhere & "([WaterFrontage] = True) AND "
ElseIf Me.cboFilterIsCorporate = 0 Then
strWhere = strWhere & "([WaterFrontage] = False) AND "
End If
If Not IsNull(Me.txtAcresMin) Then
strWhere = strWhere & "([Acreage] >= " & Me.txtAcresMin & ") AND "
End If
If Not IsNull(Me.txtAcresMax) Then
strWhere = strWhere & "([Acreage] <= " & Me.txtAcresMax & ") AND "
End If
'Date field example. Use the format string to add the # delimiters and
get the right international format.
If Not IsNull(Me.txtStartDate) Then
strWhere = strWhere & "([Sale Date] >= " & Format(Me.txtStartDate,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.txtEndDate) Then 'Less than the next day.
strWhere = strWhere & "([Sale Date] < " & Format(Me.txtEndDate + 1,
conJetDate) & ") AND "
End If
'***********************************************************************
'Chop off the trailing " AND ", and use the string as the form's Filter.
'***********************************************************************
'See if the string has more than 5 characters (a trailng " AND ") to
remove.
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then 'Nah: there was nothing in the string.
MsgBox "No criteria", vbInformation, "Nothing to do."
Else 'Yep: there is something there, so remove the "
AND " at the end.
strWhere = Left$(strWhere, lngLen)
'For debugging, remove the leading quote on the next line. Prints to
Immediate Window (Ctrl+G).
'Debug.Print strWhere
'Finally, apply the string as the form's Filter.
Me.Filter = strWhere
Me.FilterOn = True
End If
End Sub
box, but my listbox has only one column. I want to filter my list by
choosing multiple counties in my listbox (I also have other choices in text
boxes of state, date fields, etc.). I have pasted my code below for my
filter button. I'm not great with writing and deciphering code, but seem to
do ok sometimes in modifying, but I can't get this one. I've read through
many other posts here, and still can't figure it out.
Everything works till I put in the listbox. txtFilterCity is the name of my
lb. County is the name of the field I am querying. I also couldn't get the
reset button to clear the listbox, so help with that would be appreciated too.
Thank you in advance.
Option Compare Database
Option Explicit
Private Sub cmdFilter_Click()
'Purpose: Build up the criteria string form the non-blank search
boxes, and apply to the form's Filter.
'Notes: 1. We tack " AND " on the end of each condition so you can
easily add more search boxes; _
we remove the trailing " AND " at the end.
' 2. The date range works like this: _
Both dates = only dates between (both
inclusive. _
Start date only = all dates from this one onwards; _
End date only = all dates up to (and including
this one).
Dim strWhere As String 'The criteria string.
Dim lngLen As Long 'Length of the criteria string
to append to.
Const conJetDate = "\#mm\/dd\/yyyy\#" 'The format expected for dates
in a JET query string.
'Text field example. Use quotes around the value in the string.
If Not IsNull(Me.txtFilterCity) Then
strWhere = strWhere & "([County] = """ & Me.txtFilterCity & """) and "
End If
'Another text field example. Use Like to find anywhere in the field.
If Not IsNull(Me.txtFilterMainName) Then
strWhere = strWhere & "([State] Like ""*" & Me.txtFilterMainName &
"*"") AND "
End If
'Yes/No field and combo example. If combo is blank or contains "ALL", we
do nothing.
If Me.cboFilterIsCorporate = -1 Then
strWhere = strWhere & "([WaterFrontage] = True) AND "
ElseIf Me.cboFilterIsCorporate = 0 Then
strWhere = strWhere & "([WaterFrontage] = False) AND "
End If
If Not IsNull(Me.txtAcresMin) Then
strWhere = strWhere & "([Acreage] >= " & Me.txtAcresMin & ") AND "
End If
If Not IsNull(Me.txtAcresMax) Then
strWhere = strWhere & "([Acreage] <= " & Me.txtAcresMax & ") AND "
End If
'Date field example. Use the format string to add the # delimiters and
get the right international format.
If Not IsNull(Me.txtStartDate) Then
strWhere = strWhere & "([Sale Date] >= " & Format(Me.txtStartDate,
conJetDate) & ") AND "
End If
'Another date field example. Use "less than the next day" since this
field has times as well as dates.
If Not IsNull(Me.txtEndDate) Then 'Less than the next day.
strWhere = strWhere & "([Sale Date] < " & Format(Me.txtEndDate + 1,
conJetDate) & ") AND "
End If
'***********************************************************************
'Chop off the trailing " AND ", and use the string as the form's Filter.
'***********************************************************************
'See if the string has more than 5 characters (a trailng " AND ") to
remove.
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then 'Nah: there was nothing in the string.
MsgBox "No criteria", vbInformation, "Nothing to do."
Else 'Yep: there is something there, so remove the "
AND " at the end.
strWhere = Left$(strWhere, lngLen)
'For debugging, remove the leading quote on the next line. Prints to
Immediate Window (Ctrl+G).
'Debug.Print strWhere
'Finally, apply the string as the form's Filter.
Me.Filter = strWhere
Me.FilterOn = True
End If
End Sub