Hallo Leute,
ich brauch dringend Hilfe. Ich habe ein Unterformular mit einer Suche per Button. Jetzt will ich aber noch eine Checkbox integrieren. Diese soll 3 Werte ausgeben und als 2 Kriterium in der Suche fungieren. Einmal wenn in Spalte erledigt_am ein Datum steht (quasi nicht leer), einmal wenn die Spalte erledigt_am kein Datum steht (quasi leer) und einmal soll es alle Anzeigen. Im Formular habe ich die Box check_erl genannt und den dreifachen Status aktiviert. Wie bekomme ich das sinnvoll in den bisherigen Code eingebaut?
Private Sub cmdSuche_Click()
Dim strFilter As String
If Len(Me!txtSuche) > 0 Then
strFilter = "AZ_ARKO LIKE '" _
& Me!txtSuche & "'"
Me!Daten_Prozessregister.Form.Filter = strFilter
Me!Daten_Prozessregister.Form.FilterOn = True
Else
Me!Daten_Prozessregister.Form.Filter = ""
End If
End Sub
das funktioniert auch nicht....die Spalte erledigt_am ist als Datum in der Tabelle definiert...Access sagt Typen unverträglich
Private Sub cmdSuche_Click()
If Len(Me!txtSuche) > 0 And Me!chkerl = Null Then
strFilter = "Bearbeiter_ARKO LIKE '" _
& Me!txtSuche & "'"
Me!Daten_Prozessregister.Form.Filter = strFilter
Me!Daten_Prozessregister.Form.FilterOn = True
ElseIf Len(Me!txtSuche) > 0 And Me!chkerl.Value = True Then
strFilter = "Bearbeiter_ARKO LIKE '" _
& Me!txtSuche & "'" And "erledigt_am" > "0"
Me!Daten_Prozessregister.Form.Filter = strFilter
Me!Daten_Prozessregister.Form.FilterOn = True
ElseIf Len(Me!txtSuche) > 0 And Me!chkerl.Value = False Then
strFilter = "Bearbeiter_ARKO LIKE '" _
& Me!txtSuche & "'" And "erledigt_am" = Null
Me!Daten_Prozessregister.Form.Filter = strFilter
Me!Daten_Prozessregister.Form.FilterOn = True
Else
Me!Daten_Prozessregister.Form.Filter = ""
End If
End Sub
Dein Code offenbart massive Defizite bei den Grundlagen:
Ein Vergleich mit Null in VBA und SQL unterscheidet sich grundsätzlich:
VBA: IsNull(Variable) = True/False
SQL: Field Is Null
Wenn du einen SQL String per VBA zusammenstoppelst - und beim Filter gibt es da keine Alternative,
dann musst du verstehen, dass eine Variable abhängig vom Datentyp immer anders formatiert werden muss.
Es unterscheiden sich String, Datum, Zahl und Zahlen mit Nachkomma-Anteil.
Wenn du in VBA einem String einen Wert zuweist, dann bedeutet ein Hochkomma: Ende des Strings.
ZitatstrFilter = "Bearbeiter_ARKO LIKE '" _
& Me!txtSuche & "'" And "erledigt_am" > "0"
Hier entsteht ein Vergleich zwischen dem ersten String und dem zweiten Ausdruck
Es wird also verglichen ob "Bearbeiter_ARKO LIKE '" _
& Me!txtSuche & "'"
und "erledigt_am" > "0" ein True liefern.
Sprich in strFilter steht in so einem Fall natürlich immer der Wert "Falsch"
Hier eine Möglichkeit für den Ausdruck:
strFilter = "Bearbeiter_ARKO LIKE '" _
& Me.txtSuche & "' And erledigt_am Is Not Null"Und Like macht einen Muster Vergleich. Weiß nicht ob du da das Konzept verstehst. Schau dir das mal in der Hilfe an.
ich bin leider nicht sehr bewandert was vba angeht :( vielen Dank!
also dank deiner hilfe passt es jetzt mit ja und nein - allerdings fehlt mir quasi der 3. status, wo es alles anzeigen soll. ich hab gelesen, dass dieser status NULL ist aber das funktioniert nicht
das müsste der part im code sein:
If Len(Me!txtSuche) > 0 And chkerl.Value = Null Then
strFilter = "Bearbeiter_ARKO LIKE '" _
& Me!txtSuche & "'"
Me!Daten_Prozessregister.Form.Filter = strFilter
Me!Daten_Prozessregister.Form.FilterOn = True
habs hinbekommen. durch die änderung der reihenfolge der elseif. funktioniert jetzt! vielen dank nochmal