VBA Filtern durch mehrere Werte im Feld

Guten morgen alle Miteinander,
ich habe folgendes Problem und hoffe ihr könnt mir helfen (Access 2003):

Ich erstelle zurzeit eine Projektdatenk.
Nun habe ich ein Endlosformular mit den darin befindlichen Projekten.
Mit einer Kombinationsliste habe ich per VBA und SQL einen Bearbeiter Filter erstellt. Sobald man einen Bearbeiter in dieser Liste auswählt, werden nur noch Projekte mit diesem Bearbeiter angezeit. Zudem steht auch noch „“ zur Auswahl womit der Filter ausgestellt wird.

Nun habe ich noch dadrunter zwei Kontrollkästchen. Diese Kästchen sollen nun nach den „Abgeschlossenen“ und „Offenen“ Projekten Filtern. Diese Basieren auf das Status Feld. Das Feld hat ein Nachschlagewert mit den Werten „Offen (1), In Bearbeiteung (2), Abgeschlossen (3), Wartet auf etwas (4) und Zurückgestellt (5)“.

Nun habe ich es immerhin geschafft das beim Klick auf das Kontrollkästchen „Offene Projekte“ nur ein Wert, und zwar Wert 2 = „In Bearbeitung“ angezeigt wird. Der Code dazu :

Private Sub offenp_Click()

If Me.offenp = True Then
Me.Filter = "Status = " & 2
Me.FilterOn = True
Else
Me.Filter = „“
End If
End Sub

Ich möchte aber das beim Klick auf „Offene Projekte“ die Projekte mit dem Statuswert 1, 2 und 4 angezeigt werden. (Bei Abgeschlossene auch, aber dafür muss ich nur die Werte ändern)

Und wichtig ist, dass dieser Filter dann nur in den Filterergebnisen von dem Bearbeiterfilter filtert.

Danke schonmal vielmals!

Schöne Grüße Hans-Peter

Moin!

Filtern nach Status 1 oder 2 oder 4

Private Sub offenp_Click()

If Me.offenp = True Then
Me.Filter = „Status=1 OR Status=2 OR Status=4“
Me.FilterOn = True
Else
Me.Filter = „“
End If
End Sub

Filtern nach Status 1 oder 2 oder 4
mit Erhalt des alten Filters (also der Beraterfilter):

Private Sub offenp_Click()

If Me.offenp = True Then
Me.Filter = Me.Filter & „AND (Status=1 OR Status=2 OR Status=4)“
Me.FilterOn = True
Else
Me.Filter = „“
End If
End Sub

Das funktioniert aber nur einmal, also Berater auswählen und einmal ein Kontrollkästchen wählen.
Danach musst Du den Filter irgendwie zurücksetzen.
Besser ist es, für die Beraterfilterung die Datenherkunft zu ändern und dort ein WHERE einzubauen.
Das ist aber nicht in zwei Worten erklärt, und ich habe gleich Urlaub!

Denkanstoss:

Public Function DatenherkunftSetzen(F As Form, strAbfrage As String, Optional strFilter As String) As Boolean

’ F: Formular, dessen Datenherkunft angepasst werden soll
’ strAbfrage: Name der Abfrage, die die ursprüngliche Datenherkunft des Formulars ist
’ strFilter: WHERE-Bedingung, die ergänzt werden soll
’ Wenn strFilter leer ist wird die Datenherkunft ag strAbfrage zurückgesetzt

Dim strSQL As String

strSQL = dbs.QueryDefs(strAbfrage).Sql
If strFilter „“ Then
strSQL = strSQL & " WHERE " & strFilter
F.RecordSource = strSQL
Else
F.RecordSource = strAbfrage
End If

End Function

Hallo hanspetergurke,

ich war immer der Meinung ich hätte mich nicht als Access Spezi geoutet. Da kann ich leider nicht weiter helfen. Muss dann gleich mal meine Daten überprüfen.

Gruß Reinhard

Hi,
Danke dir, die Kästchen klappen. Das Filtern im BFilter mit WHERE versuche ich mal!
Und noch viel Spaß im Urlaub!

sorry, bin gerade nicht im Lande

Hallo Hans-Peter,

tut mir leid, kann Dir da nicht weiterhelfen. Ich habe mich bei w-w-w als Excel-Experte ohne VBA registriert.

Viel Erfolg
Holdrio

Sorry, bin weder VBA noch Datenbank Experte

Sorry,
das ist sehr schwierig, aus der Ferne zu beurteilen, ohne die Datei vorliegen zu haben.
Auf Anhieb kann ich Dir da leider nicht weiterhelfen, obwohl ich es gerne würde.
Gruß,
Jochen

Hi,

sorry. Von Access-VBA habe ich leider gar keine Ahnung.

Gruß

Markus

Hallo Hans-Peter,

sorry, aber leider kenne ich mich nur mit VBA Excel, nicht mit den anderen Officeteilen aus.

Viel Glück!

Gruß
Natator

Hallo Hans-Peter,

in Access-VBA kenne ich mich leider nicht so gut aus.
Eine Möglichkeit wäre anstatt
Me.Filter = "Status = " & 2
durch
Me.Filter = "Status IN " & wert1, wert2, wert3
zu ersetzen.

Unter SQL kannst du auch mehrer Filterbedingungen der Abfrage heraus geben lassen.

Beispiel:
SELECT * FROM Formular WHERE Status IN 1,2,4

bzw.
Where Status=1 OR Status=2 OR Status=3

Andreas

leider verstehe ich nicht ganz was du willst. Aber versuch es doch mal mit einer select case anweisung.

lg