August 03, 2021, 17:05:58

Neuigkeiten:

Wenn ihr euch für eine gute Antwort bedanken möchtet, im entsprechenden Posting einfach den Knopf "sag Danke" drücken!


UF mit Mehrfachauswahl in Listenfeld filtern

Begonnen von mad, Juni 26, 2021, 20:27:43

⏪ vorheriges - nächstes ⏩

mad

Hallo Zusammen,

für eine Unterschriftenliste möchte ich den Inhalt eines Unterformulars durch die Mehrfachauswahl eines Listenfeldes im Hauptformular filtern bevor ich dann den Bericht öffne und drucke.

Zuerst habe ich wie folgt begonnen:

Einzelauswahl per Doppelklick im Listenfeld "lstAufgabeListeDK":
Private Sub lstAufgabeListeDK_DblClick(Cancel As Integer)
   Me!UF_frmTM1_Zulassung.Form.Filter = "AufgabeTitelID = " & Me.lstAufgabeListeDK
   Me!UF_frmTM1_Zulassung.Form.FilterOn = True
End Sub

Nun habe ich das für die Mehrfachauswahl wie folgt erweitert:
Das ungebundene Listenfeld "lstAufgabeListeDK" umgestellt auf "Mehrfachauswahl - Einzeln". Auswahl funktioniert soweit.
Dann habe ich mir einen Button "btnFilter" erstellt und einen Code den ich im Forum gefunden habe entsprechend angepaßt.
Private Sub btnFilter_Click()

    Dim vItem As Variant
    Dim sAuswahl As String

sAuswahl = ""

    With Me!lstAufgabeListeDK

        If .ItemsSelected.count > 0 Then

           For Each vItem In .ItemsSelected
                 sAuswahl = sAuswahl & .ItemData(vItem) & " oder wie "
            Next vItem
            'oder wie
            sAuswahl = Mid(sAuswahl, 1, Len(sAuswahl) - 9)
           

            Me!UF_frmTM1_Zulassung!AufgabeID_A = sAuswahl
            Me.UF_frmTM1_Zulassung.Requery
        End If
    End With
End Sub

Nach Mehrfachauswahl im Listenfeld "lstAufgabeListeDK" und drücken den Buttons "btnFilter" läuft der Code bei der Codezeile:
ZitatMe!UF_frmTM1_Zulassung!AufgabeID_A = sAuswahl
auf einen Fehler: LZF2113 - Sie haben einen Wert eingegeben, der für dieses Feld nicht gültig ist.

Vielleicht hätte jemand eine Idee wo mein Fehler liegt.


Gruss
mad

ebs17

Debug.Print sAuswahlSiehe Dir an, was Du erzeugst.

... & " oder wie "SQL und VBA sprechen auf jeden Fall englisch.
Daneben ist eine Mustersuche (LIKE) ohne Wildcards eine schlechte Lösung. Eine Prüfung auf Gleichhheit wäre überzeugender.
Mit freundlichem Glück Auf!

Eberhard

mad

Hallo,

danke für die Hinweise.

Zitat... & " oder wie "
habe ich geändert in
Zitat... & " oder wie "

Ausgegeben wird mir z.B. im Direktfenster:
Zitat63 or like 80 or like 111

Wenn ich mir die gelb markierte Zeile ansehe bekomme folgendes angezeigt:
ZitatMe!UF_frmTM1_Zulassung!AufgabeID_A=85
und
ZitatsAuswahl="63 or like 80 or like 111"
wo die ...=85 herkommen weis ich aktuell nicht.

Mit Deinem letzten Hinweis,
ZitatDaneben ist eine Mustersuche (LIKE) ohne Wildcards eine schlechte Lösung. Eine Prüfung auf Gleichhheit wäre überzeugender.
stehe ich noch etwas auf dem Schlauch. Die Werte aus "AufgabeTitelID" im Listenfeld und "AufgabeID_A" im UF sind Autowert bzw. Zahl. Ist hier eine Wildcard wirklich sinnvoll?
Wie gesagt hier komme ich noch nicht weiter.


Gruss
Manfred


ebs17

Es ist schön, dass Du die Sinnfrage stellst. Also halten wir uns mal daran.

Ziel des Ganzen dürfte ja sein, einen funktionierenden und sachlich richtigen Filter zu erstellen. Ein solcher (vergleiche auch notwendige Syntax) müsste so aussehen:
[WHERE] ID = 8 OR ID = 11 OR ID = 132
' bzw.
[WHERE] ID IN (8, 11, 132)
ID LIKE 8 usw. macht doch keinen Sinn. Entweder meint man die 8 oder eben nicht. Die 888 sollte es wohl nicht sein.
Vergleiche das mit Deinen Bemühungen und korrigiere.

Kleine Anekdote am Rande: Sage mal Deiner Frau, Du liebst eine Frau wie sie - und gucke mal, wie sie guckt ...

Zum Querlesen: Grundlagen - SQL ist leicht (15) - Mehrfachauswahl zum Filtern umsetzen
Mit freundlichem Glück Auf!

Eberhard

mad

Hallo Eberhard,

habe mir mal das Thema
ZitatZum Querlesen: Grundlagen - SQL ist leicht (15) - Mehrfachauswahl zum Filtern umsetzen
durchgelesen und auch die Beispiel-DB angesehen.

Zuerst habe ich meine Codezeile wie folgt geändert:
sAuswahl = sAuswahl & .ItemData(vItem) & " Or AufgabeID_A= "
Der Code bleibt aber wieder an der selben Stelle hängen:
ZitatMe!UF_frmTM1_Zulassung!AufgabeID_A = sAuswahl

Wenn ich mit dem Mauszeiger auf sAuswahl gehen, wird mir folgendes angezeigt:
sAuswahl="63 or AufgabeID_A=80 or AufgabeID_A=111 or Aufg"
Igendwie ist "AufgabeID_A" mit "sAuswahl" nicht gleich und deswegen wird scheinbar mein UF nicht gefiltert.


Dann habe ich es mit einem angepaßten Code "DynamicSQL - Like" versucht.
Dazu habe ich nachfolgenden Code 1:1 übernommen;
Private Function GetSelection(AnyListbox As ListBox, SelectionNumber As Long) As Variant
    Dim itm As Variant
    Dim vArr() As Variant
    Dim j As Long

    ReDim vArr(AnyListbox.ListCount - 1)
    With AnyListbox
        For Each itm In .ItemsSelected
            vArr(j) = .ItemData(itm)
            j = j + 1
        Next
    End With
    If j > 0 Then
        ReDim Preserve vArr(j - 1)
        SelectionNumber = j
        GetSelection = vArr
    End If
End Function

und wie gesagt den Code "DynamicSQL - Like" wie folgt angepaßt:
Private Sub btnFilter_Click()

    Dim vItem As Variant
    Dim sAuswahl As String
    Dim MyArr As Variant
    Dim MyNumber As Long

    MyArr = GetSelection(Me.lstAufgabeListe, MyNumber)
    If MyNumber > 0 Then
        sAuswahl = "AufgabeID_A=" & Join(MyArr, " OR AufgabeID_A=")
    End If


        Me!UF_frmTM1_Zulassung!AufgabeID_A = sAuswahl
        Me.UF_frmTM1_Zulassung.Requery


End Sub

Aber auch jetzt bleibt der Code bei
ZitatMe!UF_frmTM1_Zulassung!AufgabeID_A = sAuswahl
stehen.
Auch hier wird mir die ID des DS auf den ich im UF stehe gezeigt, wenn ich mit dem Mauszeiger auf die gelb markierte Codezeile auf "AufgabeID_A=85" stehe. Meistens eben die erste Zeile.
Wenn ich auf "sAuswahl" stehe wir mir folgendes angezeigt:
ZitatsAuswahl="AufgabeID_A=63 or AufgabeID_A=80 or AufgabeID_A=111"


???????


Gruss
mad

mad

Vielleicht hilft auch eine stark reduzierte Muster-DB.
Habe ich vergessen.

Gruss
mad

MzKlMu

Hallo,
Du willst doch das Ufo filtern, also musst Du das auch machen.
.
.
        Me!UF_frmTM1_Zulassung.Form.Filter = sAuswahl
        Me.UF_frmTM1_Zulassung.Form.FilterOn = True
End Sub
Gruß
Klaus

mad

Manchmal kann es auch Einfach sein, wenn man den Durchblick hat  ::).

Danke euch.


Gruss
mad