Access-o-Mania

Access-Forum (Deutsch/German) => Formular => Thema gestartet von: mad am Februar 05, 2022, 06:33:33

Titel: Formular mit weiterem Filterkriterium öffnen (VBA)
Beitrag von: mad am Februar 05, 2022, 06:33:33
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

Titel: Re: Formular mit weiterem Filterkriterium öffnen (VBA)
Beitrag von: ebs17 am Februar 05, 2022, 10:58:07
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)
Titel: Re: Formular mit weiterem Filterkriterium öffnen (VBA)
Beitrag von: mad am Februar 05, 2022, 13:02:04
Irgendwie steh ich wieder mal voll aufn Schlauch.

Me.Filter = Me.Filter & " AND Erledigt =  " & Me.btnUmschaltErledigt
   Debug.Print Me.Filter
    Me.FilterOn = True

Ergebnis:
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.Filter

Ergebnis:
Zitat[OK] And [Erledigt]=0 AND Erledigt = -1 And Erledigt = True

Aktuell habe ich keine Ahnung.


Gruss
mad

Titel: Re: Formular mit weiterem Filterkriterium öffnen (VBA)
Beitrag von: ebs17 am Februar 05, 2022, 14:06:43
(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

Titel: Re: Formular mit weiterem Filterkriterium öffnen (VBA)
Beitrag von: mad am Februar 05, 2022, 17:41:54
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
Titel: Re: Formular mit weiterem Filterkriterium öffnen (VBA)
Beitrag von: Beaker s.a. am Februar 06, 2022, 12:06:16
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?