Office: (Office 2016) Access VBA Abfrage erstellen für Filterung eines Berichtes

Helfe beim Thema Access VBA Abfrage erstellen für Filterung eines Berichtes in Microsoft Access Hilfe um das Problem gemeinsam zu lösen; Hallo Leute, habe ein Problem und im nach langer Suche im Netz leider nichts gefunden. Ich möchte mittels VBA einen Bericht öffnen/drucken, bei dem... Dieses Thema im Forum "Microsoft Access Hilfe" wurde erstellt von ch_peer, 23. August 2018.

  1. ch_peer Neuer User

    Access VBA Abfrage erstellen für Filterung eines Berichtes


    Hallo Leute,

    habe ein Problem und im nach langer Suche im Netz leider nichts gefunden. Ich möchte mittels VBA einen Bericht öffnen/drucken, bei dem sich erst ein Formular öffnet, in dem ich den WHERE Ausdruck für die Auswahl der Daten auswähle. Hier mein Code:

    Private Sub Befehl0_Click()
    Dim strSQL As String
    Dim FilterKriterien As String

    DoCmd.OpenForm "F_AuswahlZug", acNormal, WindowMode:=acDialog
    FilterKriterien = [Forms]![F_AuswahlZug]![Kombinationsfeld_FilterZuege]
    strSQL = "SELECT [standesbuchnummer] " & _
    "FROM A_Mitgliederliste " & _
    "WHERE standesbuchnummer " & FilterKriterien

    DoCmd.OpenReport "B_Mitgliederliste", View:=acViewPreview, WhereCondition:=strSQL

    End Sub


    Die Variable FilterKriterien steht in einem Kombinationsfeld vom Formular F_AuswahlZug. Hier die Daten welche im Kombinationsfeld sind:
    ">=100 und <200"
    "5 oder >=200 und < 300"

    Leider bekomme ich das nicht hin, dass der Bericht entsprechend geöffnet wird.

    Vielleicht kann mit jemand beim Code helfen. Bin in VBA Programmierung noch ein Anfänger.

    Besten Dank.
     
    ch_peer, 23. August 2018
    #1
  2. Exl121150 Erfahrener User
    Hallo,

    du hast formal einen schönen VBA-Code produziert, obwohl du behauptest, Anfänger zu sein.
    Inhaltlich sind aber ein paar harte Nüsse enthalten:
    1. Du hast offenbar ein Formular (ich nenne es im Folgenden "Formular1"), das den Button "Befehl0" enthält. Durch Klick auf diesen löst du die Ereignisbehandlung-SUB "Befehl0_Click()" aus. In dieser öffnest du das Formular "F_AuswahlZug" im Dialogmodus.
      Dabei dürfte dieses Formular "F_AuswahlZug" auch eine ComboBox "Kombinationsfeld_FilterZuege" mit 2 Einträgen enthalten, wovon du einen auswählst. Dieses Formular musst du dann auf irgendeine Weise schließen,
      um im Code weiterzumarschieren zur Wertzuweisung an die Stringvariable "FilterKriterien".
      Das Problem dabei ist, dass du an dieser Stelle auf die diversen Innereien des geschlossenen Formulars nicht (mehr) zugreifen kannst.
      Man kann dieses Problem zB. mit Public deklarierten Variablen oder aber mit den sogenannten TempVars-Variablen umgehen. Im folgenden Code-Vorschlag habe ich diese "FilterZuege" genannt.
    2. Die Konstruktion des Inhalts der "strSQL"-Variablen ist im Prinzip in Ordnung. Doch da offenbar eine der beiden Combobox-Einträge als "FilterKritien" übergeben werden sollen, so kann das nicht funktionieren.
      Der resultierende Inhalt von "strSQL" würde nämlich zB. lauten:
      strSQL = "SELECT [standesbuchnummer] FROM A_Mitgliederliste WHERE standesbuchnummer >=100 und <200"
      strSQL = "SELECT [standesbuchnummer] FROM A_Mitgliederliste WHERE standesbuchnummer 5 oder >=200 und < 300"

      Er sollte aber offenbar so lauten:
      strSQL = "SELECT [standesbuchnummer] FROM A_Mitgliederliste WHERE standesbuchnummer between 100 and 199"
      strSQL = "SELECT [standesbuchnummer] FROM A_Mitgliederliste WHERE standesbuchnummer = 5 or standesbuchnummer between 200 and 299"
    3. Zum Abschluss rufst du mittels "DoCmd.Openreport" den Bericht "B_Mitgliederliste" im Voransichtsmodus auf, was im Prinzip ok ist. Jedoch passt dann aber nicht mehr die "strSQL"-Variable als WhereCondition.
      In der WhereCondition darf man nur das verwenden, was auch in einer WHERE-Klausel einer SQL-Anweisung steht (jedoch ohne dem WHERE).
      Damit die "strSQL" bzw. die "strWHERE" überhaupt richtig funktionieren können, habe ich eine kleine Funktion "GetSQL_Klausel(..)" gebastelt, sodass die beiden Combobox-Einträge entsprechend kurz und flexibel genug sind (Hinweise siehe unten in blauer Farbe).
    Mein Code-Vorschlag:
    Code:
    [b]'Code für das Formular "Formular1":[/b]
    Option Compare Database
    Option Explicit
    Private Sub Form_Load()
      TempVars.Add Name:="FilterZuege", Value:=""
    End Sub
    Private Sub Befehl0_Click()
      Dim strSQL As String, strWHERE As String
      Dim FilterKriterien As String
      
      DoCmd.OpenForm "F_AuswahlZug", acNormal, WindowMode:=acDialog
      
      strWHERE = GetSQL_Klausel(TempVars("FilterZuege"), "standesbuchnummer")
      strSQL = "SELECT [standesbuchnummer] " & _
               "FROM A_Mitgliederliste " & _
               "WHERE " & strWHERE & ";"
               
      DoCmd.OpenReport "B_Mitgliederliste", View:=acViewPreview, WhereCondition:=strWHERE
    End Sub
    Private Function GetSQL_Klausel(strWHERE As String, Optional strVar As String = "") As String
      Dim S$, Bw$(), I%
      Bw$ = Split(strWHERE, "{")
      For I% = 1 To UBound(Bw$)
        Bw$(I%) = Replace(Replace(Bw$(I%), "..", " and "), "}", " ")
      Next I%
      S$ = Join(Bw$, " between ")
      S$ = Replace(S$, "$", strVar)
      S$ = Replace(S$, "|", " or ")
      GetSQL_Klausel = S$
    End Function
    '[COLOR="#0000CD"][b][U]Einträge in der Combobox[/U][/b] (für WHERE-Klausel):[/COLOR]
    '[COLOR="#0000CD"][b]${100..199}[/b] [/COLOR]   -->  "standesbuchnummer between 100 and 199"
    '[COLOR="#0000CD"][b]$=5|${200..299}[/b][/COLOR] --> "standesbuchnummer=5 or standesbuchnummer between 200 and 299"
    
    Code:
    [b]'Code für das Formular "F_AuswahlZug":[/b]
    Option Compare Database
    Option Explicit
    Private Sub Form_Load()
      TempVars("FilterZuege") = ""
    End Sub
    Private Sub Kombinationsfeld_FilterZuege_Click()
      TempVars("FilterZuege") = Me!Kombinationsfeld_FilterZuege.Text
    End Sub
    Private Sub Befehl2_Click()
      DoCmd.Close acForm, , acSaveNo
    End Sub
    
     
    Exl121150, 24. August 2018
    #2
Thema:

Access VBA Abfrage erstellen für Filterung eines Berichtes

Die Seite wird geladen...
  1. Access VBA Abfrage erstellen für Filterung eines Berichtes - Similar Threads - Access VBA Abfrage

  2. Auslesen einer Abfrage in VBA Modul

    in Microsoft Access Hilfe
    Auslesen einer Abfrage in VBA Modul: Hallo zusammen, ich wünsche allen ein frohes und gesundes Jahr 2024. Ich habe eine alte Access 2003 und da habe ich zur Ermittlung von Planungsdaten folgende Funktion genutzt, jetzt mit Office 365...
  3. Doppelkopf Spielplan (jeder gegen jeden) VBA / Excel / Access

    in Microsoft Excel Hilfe
    Doppelkopf Spielplan (jeder gegen jeden) VBA / Excel / Access: Hallo zusammen *:)* in diesem Forum habe ich bereits zwei Beiträge gefunden, die in die Richtung meines Anliegens gehen - beides passt letzten Endes dann aber leider doch nicht auf meinen...
  4. Abfrage per VBA zusammenbauen

    in Microsoft Access Hilfe
    Abfrage per VBA zusammenbauen: Hi, Ich habe in meiner Datenbank das angehängte Formular, mit dem die Datensätze (Prüfungsfragen) nach bis zu 3 verschiedenen Kriterien gefiltert werden können. Bislang habe ich 8 Verschiedene...
  5. Access-Abfrage mit Excel VBA starten

    in Microsoft Excel Hilfe
    Access-Abfrage mit Excel VBA starten: Hallo alle zusammen, habe mal wieder ein kleines Problem :-) Ich möchte aus meinem Excel VBA Code eine Tabellenerstellungsabfrage (existiert bereits in der DB) in Access ausführen. Wie kann ich...
  6. Kriterium einer Access Abfrage in VBA ändern (s. Code)

    in Microsoft Access Hilfe
    Kriterium einer Access Abfrage in VBA ändern (s. Code): Hallo ans Forum, ich lasse über meine Access-DB diverse Abfragen laufen und exportiere diese dann in eine einzige Excel Datei. Um das Kriterium (Schiffsname), das ich abfrage nicht für jede...
  7. Access-Abfrage aus DB importieren und in Tabelle umwandeln via VBA

    in Microsoft Access Hilfe
    Access-Abfrage aus DB importieren und in Tabelle umwandeln via VBA: Hallo! Folgendes: Ich habe eine DB "Datenbank_Zugriff" und eine DB "Datenbank_Abfrage", die Namen sind nur zum schnelleren Verständnis. Von der DB "Datenbank_Zugriff" aus will ich über VBA auf...
  8. Daten aus Access-Abfrage in VBA auslesen und weiterverarbeiten

    in Microsoft Access Hilfe
    Daten aus Access-Abfrage in VBA auslesen und weiterverarbeiten: Hallo zusammen! Ich möchte Dateien, deren Pfade in einer Access-Abfrage stehen mit Hilfe von VBA als Outlook-Email verschicken. Eine vorgegebene Datei kann ich mit folgendem Code verschicken...
  1. Diese Seite verwendet Cookies, um Inhalte zu personalisieren, diese deiner Erfahrung anzupassen und dich nach der Registrierung angemeldet zu halten.
    Auf dieser Website werden Cookies für die Zugriffsanalyse und Anzeigenmessung verwendet.
    Wenn du dich weiterhin auf dieser Seite aufhältst, akzeptierst du unseren Einsatz von Cookies.
    Information ausblenden