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
|
|
0
|
|
|
|
Reply
|
Utf
|
12/4/2009 9:36:01 PM |
|
Once you make a list box Multiselect, any reference to it will always return
Null, whether or not anything's selected.
Replace
'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
with
'Text field example. Use quotes around the value in the string.
If Me.txtFilterCity.ItemsSelected.Count > 0 Then
For Each varSelected In Me.txtFilterCity.ItemsSelected
strCounty = strCounty & """" & Me.txtFilterCity.ItemData(varSelected)
& _
""", "
Next varSelected
strWhere = strWhere & "([County] IN (" & strCounty & ") and "
End If
Make sure you add the following declarations to the code:
Dim strCounty As String
Dim varSelected As Variant
--
Doug Steele, Microsoft Access MVP
http://I.Am/DougSteele
(no e-mails, please!)
"sse1979" <sse1979@discussions.microsoft.com> wrote in message
news:618A6662-DA84-4A40-9247-D4C16F5A0F88@microsoft.com...
> 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
|
|
0
|
|
|
|
Reply
|
Douglas
|
12/5/2009 12:55:03 PM
|
|
Thank you for your assistance. Though I came up with a problem when typing in
& _ (That is simply an ampersand and a underscore, correct?)
""", "
After I enter that code, those two lines turn red and I get a vb error
window saying: Compile error: Expected: line number or label or statement or
end of statement.
I entered the declaration Doug mentioned to do, but when I try new code
suggested, I get this error. Any ideas? Please? :)
So the code that I edited now looks like this:
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
Dim strCounty As String 'The criteria string.
Dim lngLen As Long
Dim varSelected As Variant 'Length of the criteria string
to append to.
Const conJetDate = "\#mm\/dd\/yyyy\#" 'The format expected for dates
in a JET query string.
'***********************************************************************
'Look at each search box, and build up the criteria string from the
non-blank ones.
'***********************************************************************
'Text field example. Use quotes around the value in the string.
If Me.txtFilterCity.ItemsSelected.Count > 0 Then
For Each varSelected In Me.txtFilterCity.ItemsSelected
strCounty = strCounty & """" & Me.txtFilterCity.ItemData(varSelected)
& _
""", "
Next varSelected
strWhere = strWhere & "([County] IN (" & strCounty & ") and"
End If
"Douglas J. Steele" wrote:
> Once you make a list box Multiselect, any reference to it will always return
> Null, whether or not anything's selected.
>
> Replace
>
> '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
>
> with
>
> 'Text field example. Use quotes around the value in the string.
> If Me.txtFilterCity.ItemsSelected.Count > 0 Then
> For Each varSelected In Me.txtFilterCity.ItemsSelected
> strCounty = strCounty & """" & Me.txtFilterCity.ItemData(varSelected)
> & _
> """, "
> Next varSelected
> strWhere = strWhere & "([County] IN (" & strCounty & ") and "
> End If
>
> Make sure you add the following declarations to the code:
>
> Dim strCounty As String
> Dim varSelected As Variant
>
> --
> Doug Steele, Microsoft Access MVP
> http://I.Am/DougSteele
> (no e-mails, please!)
>
>
>
> "sse1979" <sse1979@discussions.microsoft.com> wrote in message
> news:618A6662-DA84-4A40-9247-D4C16F5A0F88@microsoft.com...
> > 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
>
> .
>
|
|
0
|
|
|
|
Reply
|
Utf
|
1/25/2010 2:35:01 PM
|
|
|
2 Replies
240 Views
(page loaded in 0.112 seconds)
Similiar Articles: Multiselect List Box - microsoft.public.access.formsI'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 ch... Using VBA to select Items in multiselect Listbox - microsoft ...How can you programatically select items in a multiselect list box based on their lables? Certain groups of items in my multiselect listbox will be... Events for a multiselect list box - microsoft.public.access ...I'm confused about what events occur with a multi-select list box. When I select an item from the box (shift-click), does the Click event or the A... Listbox and multi-select and dropdown? - microsoft.public.access ...I need to have combo box capability with multi-select ability. I tried using listboxes, but the problem I have is they don't drop down so I can see o... Multiselect Listbox to another Listbox - Urgent Help Please ...Here is a summary of what I need help with. I have the following: tblECR ECRID - PK ECRNumber - Text tblECN ECNID - PK ECRsSelected - Text (listbox ... how to scroll to a position in a multiselect list box ...Access 2007 I have an estimating form (continuous form subform) that occupies all of the screen. I am working on creating a fairly friendly mech... Multiselect combobox - microsoft.public.accessMake Listbox behave like a combobox (sort of) - microsoft.public ... how to scroll to a position in a multiselect list box ... BTW - looks like the news group server of my ... multiselect listbox to filter subform combobox - microsoft.public ...I have a form called f4Project. It has a subform called f4ProjUnitSub. f4ProjUnitsub is a continuous form. How can I have a ListBox called lstSite... populate table using multiselect listbox - microsoft.public.access ...Access 2003 I have a main form called f001ProjectReview (PK ProjectID). There is a subform called f022Shipping(PK ShipID, SK ProjectID) with a simple multiselect ... Using Multi-Select List Box Items in another Control - microsoft ...I need to use the chosen items in a multi-select List Box as concatenated text in another control on a subform. This text will be part of a large ... Multi-select Checkboxes and ListboxesInside Technique: Multiselect Checkboxes and Listboxes By Scott Isaacs. The implementation for handling multiple selection in browsers ... Multiselect Items in a List Box SampleThis sample shows how to manage multiple items selected in a list box. The form contains a list box with the MultiSelect property set to True (.T.). VB Tutorials - MultiSelect ListBoxesAward winning site dedicated to providing the best Visual Basic resources for the novice VB programmer. Tutorials, links, downloads, tips, game programming resources ... How to Use a Multi-Select List Box to Filter a FormFor more information about the MultiSelect property of a list box, search for "MultiSelect property" using the Microsoft Access 97 Help Index. Microsoft Access tips: Use a multi-select list box to filter a reportHow to filter a report in a Microsoft Access database, based on the values selected an unbound muti-select list box. 7/16/2012 8:57:53 PM
|