Neuigkeiten:

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

Mobiles Hauptmenü

Formular, Mehrauswahl > Bericht generieren

Begonnen von WhiteCrow, Mai 19, 2026, 13:48:55

⏪ vorheriges - nächstes ⏩

WhiteCrow

Tach ProfiLeutz,

folgendes Scenario:

Ich habe im einem Formular (frm_BerichtsGenerator) drei ListBoxen:
lst_Standort,
lst_Kategoieen (Mehrfachauswahl) und
lst_Zustand (Mehrfachauswahl)
mit d.Datenherkunft und GROUP BY von/im eine Abfrage (qry_BerichtsGenerator) mit mehreren Tabellen.
Screenshot 1

Jetzt, bei einem Klick auf dem "Bericht generieren" -Button, wird via:
Private Sub btn_Generieren_Click()

    Dim strFilter As String
    Dim varItem As Variant
   
    Dim strKategorie As String
    Dim strZustand As String

    ' ===== Standort (Einzelauswahl) =====
    If Not IsNull(Me.lst_Standort) Then
        strFilter = "[Standort] = '" & Me.lst_Standort & "'"
    End If

    ' ===== Kategorie (Mehrfachauswahl) =====
    If Me.lst_Kategorie.ItemsSelected.Count > 0 Then
        For Each varItem In Me.lst_Kategorie.ItemsSelected
            strKategorie = strKategorie & "'" & Me.lst_Kategorie.ItemData(varItem) & "',"
        Next varItem
       
        strKategorie = Left(strKategorie, Len(strKategorie) - 1)
       
        If strFilter <> "" Then strFilter = strFilter & " AND "
        strFilter = strFilter & "[Kategorie] IN (" & strKategorie & ")"
    End If

    ' ===== Zustand (Mehrfachauswahl) =====
    If Me.lst_Zustand.ItemsSelected.Count > 0 Then
        For Each varItem In Me.lst_Zustand.ItemsSelected
            strZustand = strZustand & "'" & Me.lst_Zustand.ItemData(varItem) & "',"
        Next varItem
       
        strZustand = Left(strZustand, Len(strZustand) - 1)
       
        If strFilter <> "" Then strFilter = strFilter & " AND "
        strFilter = strFilter & "[Zustand] IN (" & strZustand & ")"
    End If

    ' ===== Bericht öffnen =====
    If strFilter = "" Then
        DoCmd.OpenReport "rpt_Auswertungs-Bericht", acViewPreview
    Else
        DoCmd.OpenReport "rpt_Auswertungs-Bericht", acViewPreview, , strFilter
    End If

End Sub
...zwar eine "Berichts-Vorlage" (rpt_Auswertungs-Bericht) fehlerfrei geöffnet,
je doch ohne Daten.

Screenshot 2

Habt Ihr eine Idee, was ich dabei falsch machen könnte oder
noch dafür "veranstalten" muss?

Für eure Antworten bedanke mich im Voraus und mit LG *.crow

EDIT: wenn ich keinem Auswahl treffe, bzw. Auswahl Zurücksetze und auf Generieren klicke,
sodann wird das Bericht mit allen Datensätzen von der verbundene Abfrage dargestellt.

Knobbi38

#1
Ich würde mal sagen, da wird deine Where-Bedingung falsch sein, ein "Filter" ist das ja nicht. Überprüfe die Bedingung in dem du an geeigneter Stelle eine Breakpoint setzt oder dir den Inhalt von strFilter im Dirktfenster per Debug.Print ausgeben lässt.

Hat sich eigentlich dein anderer Thread erledigt? Du hast keine Rückmeldung gegeben.  >:(

PhilS

Zitat von: WhiteCrow am Mai 19, 2026, 13:48:55Habt Ihr eine Idee, was ich dabei falsch machen könnte
Für sich genommen sieht dein Code plausibel und korrekt aus.
Allerdings geht aus deinem Posting nicht hervor, welche Datentypen die relevanten Spalten (Standort, Kategorie, Zustand) haben. Dein Code ist für Text-Spalten ausgelegt, was eher unüblich wäre. Sinnvollerweise speichert man numerische Fremdschlüssel. Dann würden die Begrenzer (') um deine Kriterienwerte entfallen.
Neue Videoserie: Windows API in VBA

Klassische CommandBars visuell bearbeiten: Access DevTools CommandBar Editor

WhiteCrow

#3
Guten Morgen,

@PhilS: Ja, das war's ja auch für Text und zwar mit Absicht geplant.
Nicht die ID Felder (Zahl), sondern dazugehörigen "Beschreibungsfelder" (Spalte2, als Text).

Gebe zu, ein wenig unlogisch aber... ich würde die Datenbank auch etwas anders aufbauen.
Hier ein Screenshot wie die Tabellenbeziehungen für Abhänige-Kombinationsfelder aufgebaut wurden.

Kurz: Da die tblKategorie nicht in direkten Beziehung mit Haupttabelle (tbl_Inventur)
sondern über weitere (Inventar, usw.) steht, kommt zur einem Fehler bei jeden weiteren Auswahl (zweite ListBox).

Genauer: Standort-Auswahl Filterung funktioniert, <-bekomme Bericht über sämtliche Geräte in gewählten Standort,
aber jeder weitere Filterungs-Auswahl im Liste Kategorie, scheitert bereits.
Ich bekomme die zwar soweit "Optisch" dargestellt, werden aber am Bericht nicht "weiterreicht".

Wermute muss ich am der Abfrage weiter nachjustieren/schrauben (GROUP BY usw.).



WhiteCrow

#4
ok, neue Abfrage erstellt und dem Code auf die IDs:
Private Sub btn_Generieren_Click()

    Dim strWhere As String
    Dim strKategorie As String
    Dim strZustand As String
    Dim varItem As Variant

    '--------------------------------------------------
    ' Standort (Einzelauswahl)
    '--------------------------------------------------
    If Not IsNull(Me.lst_Standort) Then
        strWhere = strWhere & "[id_Standort] = " & Me.lst_Standort & " AND "
    End If

    '--------------------------------------------------
    ' Kategorie (Mehrfachauswahl)
    '--------------------------------------------------
    For Each varItem In Me.lst_Kategorie.ItemsSelected
        strKategorie = strKategorie & "," & Me.lst_Kategorie.ItemData(varItem)
    Next varItem

    If strKategorie <> "" Then
        strKategorie = Mid(strKategorie, 2)
        strWhere = strWhere & "[KategorieID] IN (" & strKategorie & ") AND "
    End If

    '--------------------------------------------------
    ' Zustand (Mehrfachauswahl)
    '--------------------------------------------------
    For Each varItem In Me.lst_Zustand.ItemsSelected
        strZustand = strZustand & "," & Me.lst_Zustand.ItemData(varItem)
    Next varItem

    If strZustand <> "" Then
        strZustand = Mid(strZustand, 2)
        strWhere = strWhere & "[id_Zustand] IN (" & strZustand & ") AND "
    End If

    '--------------------------------------------------
    ' Letztes AND entfernen
    '--------------------------------------------------
    If Right(strWhere, 5) = " AND " Then
        strWhere = Left(strWhere, Len(strWhere) - 5)
    End If

    '--------------------------------------------------
    ' Bericht öffnen
    '--------------------------------------------------
    DoCmd.OpenReport "rpt_Auswertungs-Bericht", acViewPreview, , strWhere

End Sub
...umgeschaltet.
Jetzt sitzt, passt und reicht wie es soll weiter.

Danke sehr für Dein Gedankenstoß!