Hallo Zusammen,
bin gerade beim umstellen der Filterkriterien von meinem "frm_Lehrgaenge".
Beim öffnen per Button des "frm_Lehrgaenge", wird das entsprechend gefiltert:
Private Sub btnLehrganmeld_Click()
On Error GoTo Err_btnLehrganmeld_Click
Dim stDocName As String
Dim stLinkCriteria As String
stDocName = "frm_Lehrgaenge"
DoCmd.OpenForm "frm_Lehrgaenge", acFormDS, , "OK = Forms.UG_frm_Formauswahl_Allg.OKGlobal"
DoCmd.OpenForm stDocName, , , stLinkCriteria
Exit_btnLehrganmeld_Click:
Exit Sub
Err_btnLehrganmeld_Click:
MsgBox Err.Description
Resume Exit_btnLehrganmeld_Click
End Sub
Nun gibt es auf diesem Form eine Kontrollkästen "Erledigt" in dem ich markieren kann ob dieser Lehrgang eben erledigt ist.
Nun sollte das "frm_Lehrgaenge" zusätzlich zum bereits bestehenden Filterkriterium nur mit Datensätzen geöffnet werden bei denen das Kontrollkästchen "Erledigt" nicht abgekakt (-1) ist. Bisher werden erlidigte und nicht erledigte angezeigt.
Dann möchte ich mit einem Button "btnUmschaltErledigt" immer zwischen erledigt/nicht erledigt (1 oder -1) umschalten können.
Private Sub btnUmschaltErledigt_Click()
'Me.Filter = "Erledigt = " & btnUmschaltErledigt 'ALTER Code
Me.Filter = Me.Filter & " AND Erledigt = " & Me.btnUmschaltErledigt
Me.FilterOn = True
If Me!btnUmschaltErledigt Then
Me!btnUmschaltErledigt.Caption = "Offen"
Else
Me!btnUmschaltErledigt.Caption = "Erledigt"
End If
End Sub
Leider klappt das aber bisher nicht so richtig.
Hätte jemand einen Ansatz für mich wo und wie ich die entsprechenden Codezeilen anpassen müsste?
Gruss
mad
Me.Filter = ...
Debug.Print Me.Filter=> Nachschauen, was man erzeugt hat, weil sich Realität anders darstellen kann als der Glaube.
So sollte es aussehen:
Me.Filter = "... AND Erledigt = True"Zum Querlesen: Grundlagen - SQL ist leicht (19) - SQL in VBA und VBA in SQL (https://www.ms-office-forum.net/forum/showthread.php?t=379100)
Irgendwie steh ich wieder mal voll aufn Schlauch.
Me.Filter = Me.Filter & " AND Erledigt = " & Me.btnUmschaltErledigt
Debug.Print Me.Filter
Me.FilterOn = TrueErgebnis:
Zitat[OK] And [Erledigt]=0 AND Erledigt = -1
Ergebnis bei erneuten klick auf den Button:
Zitat[OK] And [Erledigt]=0 AND Erledigt = -1 AND Erledigt = 0
Dann habe ich folgendes versucht:
Me.Filter = Me.Filter & " AND Erledigt = " & Me.btnUmschaltErledigt & " And Erledigt = True"
Debug.Print Me.FilterErgebnis:
Zitat[OK] And [Erledigt]=0 AND Erledigt = -1 And Erledigt = True
Aktuell habe ich keine Ahnung.
Gruss
mad
(Oben hatte ich irrtümlich eine Checkbox statt einer Umschaltfläche im Kopf bezüglich des Rückgabewertes.)
... And Erledigt = 0 AND Erledigt = -1Kann der Inhalt gleichzeitig 0 und -1 sein?
Also nicht stur den Filter verlängern, sondern vorher analysieren, ob der Anteil mit Erledigt schon vorhanden ist, etwa
Dim lPosition As Long
Dim sNewPart As String
sNewpart = " AND Erledigt = " & Me.btnUmschaltErledigt
lPosition = Instr(1, Me.Filter, " AND Erledigt")
If lPosition > 0 Then
' vorhanden: Kürzen und anfügen
Me.Filter = Left(Me.Filter, lPosition - 1) & sNewPart
Else
Me.Filter = Me.Filter & sNewPart
End if
Herzlich Dank für die Unterstützung.
Habe in den Code zum öffnen des Formulars noch einen Filter eingebaut so das immer mit den nicht Erledigten (0) DS geöffnet wird.
.... "OK = Forms.UG_frm_Formauswahl_Allg.OKGlobal and Erledigt=0"
Und Deinen Code habe ich wieder um die richtige Textanzeige beim Button ergänzt:
...
' vorhanden: Kürzen und anfügen
Me.Filter = Left(Me.Filter, lPosition - 0) & sNewPart
Else
Me.Filter = Me.Filter & sNewPart
End If
If Me!btnUmschaltErledigt Then
Me!btnUmschaltErledigt.Caption = "Offen"
Else
Me!btnUmschaltErledigt.Caption = "Erledigt"
End If
Danke nochmals
mad
Hallo,
Da Eberhard es diesmal nicht erwähnt hat; - ich halte den Informationsgehalt
einer Checkbox zur Anzeige eines Status "erledigt" für ziemlich dünn. Mich
würde doch eher interessieren wann etwas erledigt wurde, und u.U. sogar
von wem. Deshalb bevorzuge ich dafür ein Datumsfeld.
Der Filter darauf ist auch nicht schwieriger als mit einer Checkbox, aber ich
gewinne die Möglichkeit weitere Information zu erhalten, - z.B. kann ich damit
die durchschnittliche Bearbeitungszeit berechnen.
gruss ekkehard
P.S.: Dass der zuerst gezeigte Code ohne Fehler gelaufen ist, kann ich mir kaum
vorstellen; -
- der Variablen "stLinkCriteria" wird kein Wert zugewiesen, bleibt also leer
- die Syntax des Filters sollte m.E. einen LZ-Fehler auslösen (der Formular-
bezug wird so ja nicht aufgelöst)
- das gleiche Form wird einmal mit diesem Filter geöffnet, und in der nächsten
Zeile noch einmal mit dem leeren Filterstring
Ich hab jetzt keine Lust das zu testen, aber sollte dadurch der Filter nicht
aufgehoben werden?