Subform recordsource based on unbound combo box results?

JeffBarker

Registered User.
Local time
Today, 22:19
Joined
Dec 7, 2010
Messages
130
Hey guys, I haven't had the need to use my VBA skills for a good few months now so I'm generally a bit rusty - hence this post.

I have a form with four unbound fields (two combo boxes and two date fields) that I need to use to build the basis of a recordsource for a subform to display the history of certain activities within our organisation.

Without giving too much away, the main form displays "Show me a list of potatoes (for arguments sake) supplied between date and date for this restaurant."

The text in italics above are the fields I need the user to filter on - so potatoes is an unbound lookup field, the two date fields are short date text fields and this restaurant is another unbound lookup.

As the user steps through the above fields they "drill down" to a criteria which then displays results on the subform below.

What's the best way to do this, guys?

Many Thanks in advance.

Jeff.
 
This sample should get you going.

Hey speakers,

That's 100% done the trick - massive thanks for that!

I may well be checking back with further questions however! ;)

Cheers,

Jeff.
 
Hey speakers,

That's 100% done the trick - massive thanks for that!

I may well be checking back with further questions however! ;)

Cheers,

Jeff.

So, moving on from the above, would anyone be able to tell me if it's possible to get the code for a text referencing more than one field?

The code provided in the example that speakers_86 hooked me up with is:

Code:
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.

    '***********************************************************************
    '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.
[B]    If Not IsNull(Me.txtFilterCity) Then
        strWhere = strWhere & "([City] = """ & Me.txtFilterCity & """) AND "
    End If[/B]

    'Another text field example. Use Like to find anywhere in the field.
    If Not IsNull(Me.txtFilterMainName) Then
        strWhere = strWhere & "([MainName] Like ""*" & Me.txtFilterMainName & "*"") AND "
    End If

    'Number field example. Do not add the extra quotes.
    If Not IsNull(Me.cboFilterLevel) Then
        strWhere = strWhere & "([LevelID] = " & Me.cboFilterLevel & ") 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 & "([IsCorporate] = True) AND "
    ElseIf Me.cboFilterIsCorporate = 0 Then
        strWhere = strWhere & "([IsCorporate] = False) 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 & "([EnteredOn] >= " & 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 & "([EnteredOn] < " & 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

And it's this line (bolded above) that I'm interested in:

Code:
[B]    If Not IsNull(Me.txtFilterCity) Then
        strWhere = strWhere & "([City] = """ & Me.txtFilterCity & """) AND "
    End If[/B]

So I need it to reference me.txtFilterCity or A N Other field or A N Other field and so on...

I'm not entirely sure of the syntax needed to do this, so if someone can suggest the correct way of going about this, I'd be most grateful.

Thanks,

Jeff.
 

Users who are viewing this thread

Back
Top Bottom