Improve company productivity with a Business Account.Sign Up

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 477
  • Last Modified:

determine if combo box selected and filtering in vba

I have a form with 6 combo boxes each combo box has a range of values that I may want to filter the form on.

I might filter on all  or 1 or none.

I will need to concatenate the filters if more than one combo is selected.


so a single filter would be in this case on combo CBBodyType:

strFilter = "[transmission]=" & """" & Me.CBTransmission.text & """" & " OR isnull([Transmission])"

If more than one filter selected I would:

strFilter = strFilter & " and " & "[transmission]=" & """" & Me.CBTransmission.text & """" & " OR isnull([Transmission])"

How can I deduce if a combo box has had a value selected so I could do the following:

If combo box transmission selected = True Then
'increment counter
    Counter = Counter + 1

    Select Case Counter
 
        Case Is = 0 ' no filter applied
        Case Is = 1 ' only one filter applied
                If Not IsNull([Forms]![FrmSMMTMaster]![TRANSMISSION].[Value]) Then
                strFilter = "[transmission]=" & """" & Me.CBTransmission.text & """" & " OR isnull([Transmission])"
                 
                Else
                    Counter = Counter - 1
                End If
        Case Is > 1 ' more than one filter applied
                If Not IsNull([Forms]![cw_client_matching_form]![TRANSMISSION].[Value]) Then
                     
                            strFilter = strFilter & " and " & "[transmission]=" & """" & Me.CBTransmission.text & """" & " OR isnull([Transmission])"
                Else
                    Counter = Counter - 1
                End If
    End Select
End If
0
PeterBaileyUk
Asked:
PeterBaileyUk
1 Solution
 
Jeffrey CoachmanMIS LiasonCommented:
Not sure of your exact design here...  
(Datatypes, Control Properties, will it always be the one OR, or can this be "Multiple" concatenations,...etc)
...and I am not quite sure why you are referencing the .text property of the combobox.
...and you also seem to be referencing other form controls besides the combobox...
"[Forms]![cw_client_matching_form]![TRANSMISSION].[Value]"

A sample file would go a long way towards clearing these questions up:

Sample database notes:
1. Back up your database(s).
2. Combine the front and back ends into one database file.
3. Remove any startup options, unless they are relevant to the issue.
4. Remove any records unless they are relevant to the issue.
5. Delete any objects that do not relate directly to the issue.
6. Remove any references to any "linked" files (files outside of the database, Images, OLE Files, ...etc)
7. Remove any references to any third party Active-x Controls (unless they are relevant to the issue)
8. Remove, obfuscate, encrypt, or otherwise disguise, any sensitive data.
9. Unhide any hidden database objects
10. Compile the code. (From the VBA code window, click: Debug-->Compile)
11. Run the compact/Repair utility.
12. Remove any Passwords and/or security.
13. If a form is involved in the issue, set the Modal and Popup properties to: No
    (Again, unless these properties are associated with the issue)
14. Post the explicit steps to replicate the issue.
15. Test the database before posting.

In other words, ...post a database that we can easily open and immediately see and/or troubleshoot the issue.
And if applicable, also include a clear graphical representation of the *Exact* results you are expecting, based on the sample data.

JeffCoachman
0
 
als315Commented:
Me.Filter = ""
If Not isnull(Me.CBTransmission) then
   Me.Filter = "[Transmission]='" & 'Me.CBTransmission & "' OR isnull([Transmission])"
endif
If Not isnull(Me.CBNext) then
   If Me.Filter = "" then
               Me.Filter = "([NextField]='" & 'Me.CBText & "' OR isnull([NexField]))"
   else
               Me.Filter = Me.Filter & " AND ([NextField]='" & 'Me.CBNext & "' OR isnull([NexField]))"
   end if
endif
.....

Open in new window

You can do it in some loop if your fields wil be named sequentally.
Take a look also at example from Helen Feddem's site:
http://helenfeddema.com/access.htm
#129 Fancy Filters
0
 
PeterBaileyUkAuthor Commented:
I have created a shrunk down db. each combo has its original singular filter remmed out after update now calls setfilters.

The count determines if a previous filter was set and if so creates the filter string with the strfilter and the "AND" part.

there is no control yet to ignore a filter if combo not selected.

so select vauxhall/opel and it should show just vauxhall/opel..select vauxhall and then select nom 2.4 and you get 2.4 vauxhalls. etc.
EE---2013.zip
0
 
PeterBaileyUkAuthor Commented:
nailed it thx
0
 
IrogSintaCommented:
Hmm, looks like you already accepted a solution before I finished going through your code.  Anyways, here's your revised database.  I believe this code is much more efficient:
Function setFilters()
    Dim strFilter As String
    Dim strTemp As String
    Dim WordFilter As String
    
    If Len(Me.Txt_Search_For) > 0 Then WordFilter = fnTextFilter(Me.Txt_Search_For, Wholewords, "[concatenated Description]")
    
    'reset filter variable
    strFilter = ""
    
    'reset filter form property
    Forms![FrmSMMTMaster].Form.Filter = strFilter
    
    If Me.CBMarque & "" <> "" Then strFilter = strFilter & " and " & "[common marque]='" & Me.CBMarque & "'"
    If Me.CBNom & "" <> "" Then strFilter = strFilter & " and " & "[Nom CC] Between " & Me.CBNom - Me.LblVNomCount.Caption & " AND " & Me.CBNom + Me.LblVNomCount.Caption
    If Me.CBFuel & "" <> "" Then strFilter = strFilter & " and " & "[FUEL]='" & Me.CBFuel & "'"
    If Me.CBTransmission & "" <> "" Then strFilter = strFilter & " and " & "[transmission]='" & Me.CBTransmission & "'"
    If Me.CBBody & "" <> "" Then
        Select Case Me.CBBody
            Case "Coupe\Convertible"
                strTemp = "Left([Body type],2)='CO'"
            Case "Estate\MPV"
                strTemp = "[Body type]='Estate' Or [body type]='MPV'"
            Case "Hatchback", "Roadster", "Saloon"
                strTemp = "[body type]='" & Me.CBBody & "'"
            Case "Others"
                strTemp = "[Body type] NOT IN('Estate', 'MPV', 'Hatchback', 'Saloon', 'Roadster')"
        End Select
        strFilter = strFilter & " and " & strTemp
    End If
    If Me.CBDoors & "" <> "" Then strFilter = strFilter & " and " & "[doors]=" & Me.CBDoors
    If Len(WordFilter) > 0 And SmartFilterToggle = True Then strFilter = strFilter & " and " & WordFilter
    
    
    If strFilter <> "" Then
        strFilter = Mid(strFilter, 5) 'removes "and " at the beginning of strFilter
        'Filter form
        Debug.Print strFilter
        Me.Filter = strFilter
        Me.FilterOn = True
    Else
        Me.FilterOn = False
    End If
    
End Function

Open in new window

You didn't have the category combobox in your code so I didn't add it either.
EE---2013.zip
0
Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Featured Post

Free Tool: ZipGrep

ZipGrep is a utility that can list and search zip (.war, .ear, .jar, etc) archives for text patterns, without the need to extract the archive's contents.

One of a set of tools we're offering as a way to say thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now