Funktion für Formularfilter mit Kriterium funktioniert nicht

30/10/2009 - 14:24 von Marion Hildebrandt | Report spam
Guten Tag,
ich bitte um Hilfe für folgende Problemstellung. In Meinem Formular
„frmAdresse“ habe ich zwei ungebundene Textfelder „txtUser“ und „txt Search“
für die Filterung der Anzeige der Adressendatensàtze. Für txtUser gibt es
vereinfacht dargestellt 2 Möglichkeiten: die Werte 1 und 2. Der Wert 1 steht
für Firmenadressen und 2 für private Adressen. In der Tabelle tblAdressse
sind die privaten Adressen in dem Feld „ADPrivat“ mit einem Hàckchen und die
Firmenadressen in dem Feld „ADFirma“ mit einem Hàckchen hinterlegt.
Ich möchte folgendes erreichen. Bei Eingabe eines Suchwortes in das
Formularfeld „txtSearch“ möchte ich entsprechend des Wertes in dem
Formularfeld „txtUser“ die privaten bzw. Firmenadressen entsprechend des
eingegeben Suchwortes filtern. Ohne das Kriterium txtUser funktioniert die
Suche wunderbar.
Mein VBA-Code im Formular ist wie folgt:
Private Sub cmdSearch_Click()
Select Case txtUser
Case Is = 1
FormFilterUserSearch Me.ADFirma, Me.txtSearch, "ADSuche", Forms!frmAdresse
Case Is = 2
FormFilterUserSearch Me.ADPrivat, Me.txtSearch, "ADSuche", Forms!frmAdresse
End Select
End Sub

Meine Funktion im Modul:

Public Function FormFilterUserSearch(ByRef Userfieldname As String, Search
As String, Fieldname As String, F As Form)
On Error GoTo Err_FormFilter
Dim strFilter As String
Dim I As Long
Dim varArray As Variant
varArray = Split(Search, " ")
For I = LBound(varArray) To UBound(varArray)
strFilter = strFilter & " AND " & Fieldname & " LIKE '*" &
varArray(I) & "*'" & " AND " & BuildCriteria(Userfieldname, dbBoolean, " =
True")
Next I
If Len(strFilter) > 0 Then
strFilter = Mid(strFilter, 6)
F.Filter = strFilter
F.FilterOn = True
End If
If F.RecordsetClone.RecordCount = 0 Then
FormFilterUserSearch = False
Else
FormFilterUserSearch = True
End If
Exit_FormFilter:
Exit Function
Err_FormFilter:
MsgBox Err.Description
Resume Exit_FormFilter
End Function

Der Schwerpunkt liegt auf folgender Zeile:
strFilter = strFilter & " AND " & Fieldname & " LIKE '*" & varArray(I) &
"*'" & " AND " & BuildCriteria(Userfieldname, dbBoolean, " = True")

Hier sollten nun noch die Werte entsprechend ADFirma = Wahr oder ADPrivat =
Wahr gefiltert werden. Es gibt leider keine Fehlermeldung. Das Ergebnis ist
folgendes: Ist der Wert txtUser=1 , werden die Adressen entsprechend des
Suchwortes angezeigt, egal ob private oder Firmenadresse. Ist der Wert
txtUser=2 wird gar keine Adresse angezeigt. Eigentlich scheint das ganz
einfach. Aber irgendwie funktioniert es nicht. Wer kann bitte helfen?

Viele Grüße aus Hamburg
Marion

Ich verwende: Vista, Office prof. 2007
 

Lesen sie die antworten

#1 Thomas Möller
30/10/2009 - 18:17 | Warnen spam
Hallo Marion,

Marion Hildebrandt schrieb:
ich bitte um Hilfe für folgende Problemstellung. In Meinem Formular
„frmAdresse“ habe ich zwei ungebundene Textfelder „txtUser“ und „txt Search“
für die Filterung der Anzeige der Adressendatensàtze. Für txtUser gibt es
vereinfacht dargestellt 2 Möglichkeiten: die Werte 1 und 2. Der Wert 1 steht
für Firmenadressen und 2 für private Adressen. In der Tabelle tblAdressse
sind die privaten Adressen in dem Feld „ADPrivat“ mit einem Hàckchen und die
Firmenadressen in dem Feld „ADFirma“ mit einem Hàckchen hinterlegt.
Ich möchte folgendes erreichen. Bei Eingabe eines Suchwortes in das
Formularfeld „txtSearch“ möchte ich entsprechend des Wertes in dem
Formularfeld „txtUser“ die privaten bzw. Firmenadressen entsprechend des
eingegeben Suchwortes filtern. Ohne das Kriterium txtUser funktioniert die
Suche wunderbar.
Mein VBA-Code im Formular ist wie folgt:
Private Sub cmdSearch_Click()
Select Case txtUser
Case Is = 1
FormFilterUserSearch Me.ADFirma, Me.txtSearch, "ADSuche", Forms!frmAdresse
Case Is = 2
FormFilterUserSearch Me.ADPrivat, Me.txtSearch, "ADSuche", Forms!frmAdresse
End Select
End Sub

Meine Funktion im Modul:

Public Function FormFilterUserSearch(ByRef Userfieldname As String, Search
As String, Fieldname As String, F As Form)
On Error GoTo Err_FormFilter
Dim strFilter As String
Dim I As Long
Dim varArray As Variant
varArray = Split(Search, " ")
For I = LBound(varArray) To UBound(varArray)
strFilter = strFilter & " AND " & Fieldname & " LIKE '*" &
varArray(I) & "*'" & " AND " & BuildCriteria(Userfieldname, dbBoolean, " =
True")
Next I
If Len(strFilter) > 0 Then
strFilter = Mid(strFilter, 6)
F.Filter = strFilter
F.FilterOn = True
End If
If F.RecordsetClone.RecordCount = 0 Then
FormFilterUserSearch = False
Else
FormFilterUserSearch = True
End If
Exit_FormFilter:
Exit Function
Err_FormFilter:
MsgBox Err.Description
Resume Exit_FormFilter
End Function

Der Schwerpunkt liegt auf folgender Zeile:
strFilter = strFilter & " AND " & Fieldname & " LIKE '*" & varArray(I) &
"*'" & " AND " & BuildCriteria(Userfieldname, dbBoolean, " = True")

Hier sollten nun noch die Werte entsprechend ADFirma = Wahr oder ADPrivat =
Wahr gefiltert werden. Es gibt leider keine Fehlermeldung. Das Ergebnis ist
folgendes: Ist der Wert txtUser=1 , werden die Adressen entsprechend des
Suchwortes angezeigt, egal ob private oder Firmenadresse. Ist der Wert
txtUser=2 wird gar keine Adresse angezeigt. Eigentlich scheint das ganz
einfach. Aber irgendwie funktioniert es nicht. Wer kann bitte helfen?



ich habe Deinen Code jetzt nicht vollstàndig nachvollzogen. Daher nur
ein Hinweis in Richtung Hilfe zur Selbsthilfe:
Füg nach der Zeile, in der der Filterstring zusammengesetzt wird mal
eine MsgBox ein und lass Dir den Filterstring anzeigen. Alternativ
kannst Du Dir den String auch in der Direktfenster ausgeben lassen:

Debug.Print strFilter


Wenn Du den String siehst, wird Dir vielleicht auffallen, was falsch
làuft. Wenn nicht poste bitte den Filterstring hier.


HTH
Thomas

Homepage: www.Team-Moeller.de

Ähnliche fragen