[Access] Automatischer PDF-Export gruppiert per VBA

MTGL

Lt. Junior Grade
Registriert
Jan. 2009
Beiträge
287
Hallo zusammen,

ich versuche gerade verzweifelt, Access 365 dazu zu nötigen, mir einen Bericht gruppiert nach Kunden auszugeben (pro Kunde ein separater Bericht als PDF mit Benennung nach Kunde). Der Bericht heißt "Bericht1" und entsteht aus der Abfrage "nachKundenNr". Die relevanten Werte stehen in der Spalte "KUNDE" (Text).

Im Folgenden findet ihr mein VBA-Skript. Nun kommt es zu einem Synatxfehler in der DoCmd.OutputTo-Zeile, wegen eines fehlenden Operators (3075: KUNDE = Max Mustermann).

-------------------------------------
Public Sub ExportPDF()

Dim sql As String
Dim db As DAO.Database
Dim rs As DAO.Recordset

sql = "SELECT KUNDE FROM nachKundenNr"
Set db = CurrentDb
Set rs = db.OpenRecordset("nachKundenNr")

Do Until rs.EOF
DoCmd.OpenReport "Bericht1", acViewPreview, , "[KUNDE] = '" & rs!KUNDE & "'"
DoCmd.OutputTo acOutputReport, "Bericht1", acFormatPDF, "C:\Users\123\Desktop\Test\report" & "_" & rs.Fields(sql).Value & ".pdf"
DoCmd.Close acReport, "Bericht1"
rs.MoveNext
Loop

rs.Close
Set rs = Nothing
Set db = Nothing

End Sub

---------------------------------

Weiß eventuell einer, wo es da klemmt? Ich tippe auf fehlende Hochkommata, aber alle von mir getesteten Varianten bringen nichts. Ich habe von VBA leider gar keinen wirklichen Plan.

Vielen Dank schon mal für eure Mühe!
 
Zuletzt bearbeitet:
MTGL schrieb:
DoCmd.OpenReport "Bericht1", acViewPreview, , "[KUNDE] = '" & rs!KUNDE & "'"
Hab das schon ewig nicht mehr gemacht und so auch noch nicht gesehen, aber hast du schonmal versucht das = durch ein like zu ersetzen. Also wenn das eine SQL Abfrage ist dann liegt es vielleicht daran.

Also so ...

DoCmd.OpenReport "Bericht1", acViewPreview, , "[KUNDE] like '" & rs!KUNDE & "'"

Aber wie gesagt, hab mit OpenReport noch nie was gemacht :-)
 
Danke dir, aber das bringt leider nichts, aber ich habe noch ein paar andere Fehler gefunden (die werden niemals alle :-D ):

Option Explicit

Public Sub ExportPDF()

Dim sql As String
Dim db As DAO.Database
Dim rs As DAO.Recordset

sql = "SELECT KUNDE FROM nachKundenNr"
Set db = CurrentDb
Set rs = db.OpenRecordset(sql, dbOpenSnapshot)

Do Until rs.EOF
DoCmd.OpenReport "Bericht1", acViewPreview, , "[KUNDE] = '" & rs!KUNDE & "'"
DoCmd.OutputTo acOutputReport, "Bericht1", acFormatPDF, "C:\Users\123\Desktop\Test\report" & "_" & rs.Fields(sql).Value & ".pdf"
DoCmd.Close acReport, "Bericht1"
rs.MoveNext
Loop

rs.Close
Set rs = Nothing
Set db = Nothing

End Sub
 
Zuletzt bearbeitet:
MTGL schrieb:
"[KUNDE] = '" & rs!KUNDE & "'"
Was sind die Fehler?

Und das hier oben ist nach der Dokumentation das hier: A string expression that's a valid SQL WHERE clause without the word WHERE.

Also WHERE KUNDE LIKE '" & rs!KUNDE & "';" nur ohne das WHERE

Und dein Record-Set hat auch den richtigen Inhalt?
 
Ich hatte ein bisschen zu viel auskommentiert. Das Problem scheint zu sein, dass er den Wert aus KUNDE nicht korrekt ausliest. Das Leerzeichen scheint an der Stelle keinen Unterschied zum Like zu machen. Die Werte aus dem Recordset scheinen zu passen.
 
Dann muss ich jetzt doch mal schnell in eine DB von mir schauen :-)

OK, was passiert wenn du statt rs!KUNDE das hier verwendest: rs.Fields(1).Value

Vielleicht aber auch Fields(0).Value da muss du mal schauen :-)
 
Zuletzt bearbeitet:
  • Gefällt mir
Reaktionen: MTGL
Danke dir! Der Tipp war gut. Ich habe jetzt den folgenden Code, mit dem er leider stumpf die Werte der 12. Spalte als Dateiname nutzt, was grundsätzlich stimmt. Ich muss nur noch so weit kommen, dass er korrekt die Spalte KUNDE nutzt.

Code:
Option Explicit

Public Sub ExportPDF()

    Const ReportName As String = "Bericht1"

    Dim sql As String
    Dim db As DAO.Database
    Dim rs As DAO.Recordset

    Dim DateiTitel As String
    Dim DateiName As String
    Dim DateiPfad As String
    Dim FilterString As String

    Set db = CurrentDb
    Set rs = db.OpenRecordset("nachKundenNr")

    Do Until rs.EOF
        FilterString = "KUNDE = '" & rs!KUNDE & "'"
        Debug.Print FilterString  ' Ist der String SQL-tauglich?
        DoCmd.OpenReport ReportName, acViewPreview, , FilterString
        DateiTitel = rs.Fields(11)
        DateiName = "report" & "_" & DateiTitel & ".pdf"
        Debug.Print DateiName ' ist das ein gültiger Dateiname?
        DateiPfad = "C:\Users\123\Desktop\Test\" & DateiName
        Debug.Print DateiPfad

        DoCmd.OutputTo acOutputReport, ReportName, acFormatPDF, DateiPfad
        DoCmd.Close acReport, ReportName

        rs.MoveNext
    Loop

    rs.Close
    Set rs = Nothing
    Set db = Nothing

End Sub
 
Mit "DateiTitel = rs.Fields("Kunde").Value" geht's :-)

Vielen Dank nochmal für deine Hilfe @Janush !
 
Ha, sehr gut ... es richtet sich hier nach deinem SQL String.

Set rs = db.OpenRecordset("nachKundenNr")

Jeh nachdem was in nachKundenNr drin steht.

SELECT KUNDE FROM XYZ erstellt halt ein Recordset mit nur einem Field und das kannst du dann nach Fields(1), oder Fields(0) (bin mir nicht mehr sicher) abfragen.

Bei SELECT * FROM XYZ muss man dann halt schauen wo die entsprechende Spalte steht.

Aber fields.("Kunde") ist doch gut :-)

Viel Spass noch
 
  • Gefällt mir
Reaktionen: MTGL
Zurück
Oben