Neuigkeiten:

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

Mobiles Hauptmenü

Komplexe Filterkombinationen in VBA

Begonnen von Umbauwfb, Juli 25, 2022, 18:22:50

⏪ vorheriges - nächstes ⏩

Umbauwfb

Hallo,
mit dem nachfolgenden Code möchte ich in einem Formular in 4 Spalten filtern.
Ich filtere über 4 ComboBoxen jeweils mit ID

Die ComboBoxen können einen Filterwunsch enthalten oder leer sein.
Das macht die Sache für mich sehr komplex.

Deswegen habe ich den Ansatz gewählt, 4 einzelne Filterentscheidungen zu treffen und diese am Ende des Codes zusammenzufassen. Und dann erst den Gesamtfilter zu aktivieren.

Die Filterung der einzelnen Spalten scheint zu gelingen. Mit oder ohne Auswahl in der ComboBox.
Die Zusammenfassung gelingt nicht.

Grundsätzliche Frage: ist eine derartige Vorgehensweise möglich?
Falls ja...wie müsste der SQL-Befehl für die Zusammenfassung lauten?

Private Sub cbxProjekt_AfterUpdate()
'+++Funktionierender Filter für 1nen Filter in 1ner Spalte - auch mit leerer ComnboBox+++
'Filterung Aller 4 Filter in den 4 Spalten funktioniert nicht

Dim sqlFilterProjekt As String
Dim sqlFilterHG As String
Dim sqlFilterG As String
Dim sqlFilterUG As String


Forms!ArchivQ_ListeF.RecordSource = "ArchivQ_Select"
       
 'Erster Filter auf ProjektT-ID
       
            If Me.cbxProjekt <> "" Then
            sqlFilterProjekt = "[ProjektT_ID] = Forms!ArchivQ_ListeF.cbxProjekt"
            Else
            sqlFilterProjekt = "[ProjektT_ID] Like '*'"
            End If
'            Me.Filter = sqlFilterProjekt
'            Me.FilterOn = True
           
'Zweiter Filter auf HGT_ID
            If Me.cbxHG <> "" Then
            sqlFilterHG = "[HGT_ID] = Forms!ArchivQ_ListeF.cbxHG"
            Else
            sqlFilterHG = "[HGT_ID] Like '*'"
            End If
'            Me.FilterOn = True

'Dritter Filter auf GT_ID
            If Me.cbxG <> "" Then
            sqlFilterG = "[GT_ID] = Forms!ArchivQ_ListeF.cbxG"
            Else
            sqlFilterG = "[GT_ID] Like '*'"
            End If
'            Me.FilterOn = True

'Vierter Filter auf UGT_ID
            If Me.cbxUG <> "" Then
            sqlFilterUG = "[UGT_ID] = Forms!ArchivQ_ListeF.cbxUG"
            Else
            sqlFilterUG = "[UGT_ID] Like '*'"
            End If
'            Me.FilterOn = True

'Zusammenfassung aller 4 Einzelfilter:
'Der Ablauf bei der Findung der 4 Einzelfilter scheint zu funktionieren
'Die Zusammenfassung gelingt nicht
'Ist ein derartiger Ablauf überhaupt möglich? Falls ja...wie müsste der SQL-Befehl für die Zusammenfassung aussehen?

            Me.Filter = sqlFilterProjekt And sqlFilterHG And sqlFilterG And sqlFilterUG
            Me.FilterOn = True
           
        Me.Requery  'Wird benötigt, weil ich noch zusätzlich über eine Abfrage filtere
End Sub

Vielen Dank für die Hilfe und
schöne Grüße aus Lüneburg
Harry

DF6GL

Hallo,


etwa so:


Me.Filter = sqlFilterProjekt & " And " & sqlFilterHG & " And " &  sqlFilterG & " And " &  sqlFilterUG

wobei das Ganze auch so geschrieben werden könnte (vorausgesetzt, die ID-Felder weisen den Datentyp LONG auf):


.
.
.


Dim strKrit as String

       
            If Not IsNull (Me!cbxProjekt) Then strKrit = strKrit & " And [ProjektT_ID] = " & Me!cbxProjekt

            If Not IsNull(Me!cbxHG) Then strKrit = strKrit & " And [HGT_ID] = " & Me!cbxHG

            If Not IsNull(Me!cbxG) Then strKrit = strKrit & " And [GT_ID] = " & Me!cbxG

            If Not IsNull(Me!cbxUG) Then trKrit = strKrit & " And [UGT_ID] = " & Me!cbxUG

            If Len(strKrit) Then
               strKrit = Mid(strKrit,5)
               Me.Filter = strKrit
               Me.FilterOn = True
            End If
.
.
.


Umbauwfb

Vielen Dank für die Hilfe Franz,

auch für die Alternative.

Der Code funktioniert ausgezeichnet!
Nachdem jetzt in VBA alles schön strukturiert ist, habe ich bis auf einen Filter alle in der Abfrage gelöscht und in VBA mit diesem Schema aufgebaut.
Einfach und übersichtlich.
Der letzte Filter, der noch in der Abfrage bleibt, greift auf ein Kombinationsfeld, in dem ich die Inhalte ALLER anderen Felder mit & zusammenfasse. In diesem Feld kann ich dann über alle Felder/Inhalte der gesamten Archiv-Datei suchen!

Grüße aus Lüneburg
Harry