Neuigkeiten:

Ist euer Problem gelöst, dann bitte den Knopf "Thema gelöst" drücken!

Mobiles Hauptmenü

Formular mit weiterem Filterkriterium öffnen (VBA)

Begonnen von mad, Februar 05, 2022, 06:33:33

⏪ vorheriges - nächstes ⏩

mad

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


ebs17

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
Mit freundlichem Glück Auf!

Eberhard

mad

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


ebs17

(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

Mit freundlichem Glück Auf!

Eberhard

mad

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

Beaker s.a.

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?


Alles, was geschieht, geschieht. - Alles, was während seines Geschehens etwas anderes geschehen lässt, lässt etwas anderes geschehen. - Alles, was sich selbst im Zuge seines Geschehens erneut geschehen lässt, geschieht erneut. - Allerdings tut es das nicht unbedingt in chronologischer Reihenfolge.
(Douglas Adams, Mostly Harmless)