Hallo,
ich bin Anfänger in Sachen VBA. Auch nach Googlen hab ich noch keine Lösung für meine Frage. Ich habe eine Funktion, diese öffnet einen Bericht, speichert diesen als PDF mit einem Dateinamen welcher sich u.a. auch aus dem Inhalt des Berichtes zusammensetzt.
Mit nur einem Filter funktionert das ganze super Gut. Nun meine Frage: Wie bekomme ich es hin verschiedenen Filter anzuwenden und im Ergebnis auch mehrere PDF's zu erhalten.
Private Sub btnExport_Click()
On Error GoTo Fehler
'Speicherpfad
Dim sFolder_for_PDF As String
sFolder_for_PDF = "C:\....."
'Speichername
Dim sFilename As String
sFilename = Me!Jahr & "_" & Me!Mandant & "_" & Me!Inkasso & "_Inkasso.pdf"
'Zusammensetzung Speicherpfad und Speichername
Dim sfull_Filename As String
sfull_Filename = sFolder_for_PDF & "/" & sFilename
'Welcher Bericht wird geöffnet
Dim Berichtsname As String
Berichtsname = "Inkasso"
'Welcher Filter wird angewendet
Dim Filter As String
Filter = "[Mandant] = 'Mandant1' AND [Inkasso] = 'Inkasso1' AND [Jahr] = " & Format(Date, "yyyy") & " "
Filter = "[Mandant] = 'Mandant1' AND [Inkasso] = 'Inkasso2' AND [Jahr] = " & Format(Date, "yyyy") & " "
Filter = "[Mandant] = 'Mandant2' AND [Inkasso] = 'Inkasso1' AND [Jahr] = " & Format(Date, "yyyy") & " "
Filter = "[Mandant] = 'Mandant2' AND [Inkasso] = 'Inkasso2' AND [Jahr] = " & Format(Date, "yyyy") & " "
'Bericht wird im Hintergrund geöffnet - Bericht wird gespeichert - Bericht wird geschlossen
DoCmd.OpenReport Berichtsname, acViewPreview, , Filter, acHidden
DoCmd.OutputTo objectType:=acOutputReport, ObjectName:=Berichtsname, OutputFormat:=acFormatPDF, outputFile:=sfull_Filename
DoCmd.Close acReport, Berichtsname, acSaveNo
Exit Sub
Fehler:
MsgBox "Der Bericht konnte nicht gespeichert werden!"
End Sub
Vielen Dank schonmal im Voraus.
Hi,
du könntest eine Verarbeitungsschleife um den entscheidenden Befehlsblock bauen, in der alle gewünschten Filter abgearbeitet werden, oder du könntest auch die Filterkriterien ganz dynamisch-flexibel aus einem Formular holen.
Hallo,
danke für den Tipp. Wie müsste ich das mit der Schleife anstellen?
Danke.
Du wendest in Deinem Code immer nur den letzten Filterausdruck an, weil der Wert der Variablen Filter überschrieben wird, bevor er in OpenReport zur Anwendung kommt.
In eier Schleife könnte das dann so aussehen:Private Sub btnExport_Click()
Dim sFolder_for_PDF As String
Dim sFilename As String
Dim sfull_Filename As String
Dim Filter As String
Dim i As Long
Dim j As Long
'Welcher Bericht wird geöffnet
Const Berichtsname As String = "Inkasso"
On Error GoTo Fehler
'Speicherpfad
sFolder_for_PDF = "C:\foo\bar\"
For i = 1 To 2
For j = 1 To 2
'Speichername
sFilename = Me.Jahr & "_Mandant" & CStr(i) & "_Inkasso" & CStr(j) & ".pdf"
'Zusammensetzung Speicherpfad und Speichername
sfull_Filename = sFolder_for_PDF & sFilename
'Welcher Filter wird angewendet
Filter = "Mandant = 'Mandant'" & CStr(i) & " AND " & _
"Inkasso = 'Inkasso'" & CStr(j) & " AND " & _
"Jahr = Year(Date())"
'Bericht wird im Hintergrund geöffnet - Bericht wird gespeichert - Bericht wird geschlossen
With DoCmd
.OpenReport Berichtsname, acViewPreview, , Filter, acHidden
.OutputTo acReport, Berichtsname, acFormatPDF, sfull_Filename
.Close acReport, Berichtsname, acSaveNo
End With
Next
Next
Exit Sub
Fehler:
MsgBox "Der Bericht konnte nicht gespeichert werden!"
End Sub
Hallo,
viiielen Dank vorerst. Ich glaube ich muss mich erstmal mit Schleifen ein wenig genauer Beschäftigen.
Gruss Nadine
Hauptsache da kommen nicht noch etliche Mandanten dazu >:(