Supportnet / Forum / Datenbanken
generieren einzelne Seiten aus Access-Bericht
Frage
Ich habe folgendes Problem:
zur Kontrolle meiner Mitglieder-Daten möchte ich jedem Mitglied jährlich einen Auszug aus der Datenbank schicken. Der Access-Bericht hat 12'000 Seiten (je Mitglied eine Seite). Ich möchte nun automatisiert 12'000 Einzelseiten als PDF-Datei drucken, die Dateien auf eine Festplatte speichern (Name soll sich aus Mitglieder-Nr und Datum zusammensetzen) und gleichzeitig eine Kontrolldatei im Textformat (mit Delimiter) mit Mitglied-Name, Eintrittsdatum, E-Mail-Adresse und dem Dateinamen erzeugen (1 Zeile je Datei).
Wer kann mir weiterhelfen?
Antwort 1 von SJ
PDF kann ich nicht erstellen, aber reicht auch ein Snapshot. Kannst in die Variable Name das jeweilige Mitglied Eintragen + den Kompletten Path!!
Bei "Bericht1" muss dein Bericht rein.
Und vor jedem Aufruf müsstest du den Filter von deinem Bericht auf das nächste Mitglied setzen.
name = "C:\Mitglied1.snp"
DoCmd.OutputTo acOutputReport, "Bericht1", "Snapshot Format", name
Mit der Text Datei wirst du mit Print # erstellen müssen. Habe es aber noch nie Probiert.
MFG
SJ
Bei "Bericht1" muss dein Bericht rein.
Und vor jedem Aufruf müsstest du den Filter von deinem Bericht auf das nächste Mitglied setzen.
name = "C:\Mitglied1.snp"
DoCmd.OutputTo acOutputReport, "Bericht1", "Snapshot Format", name
Mit der Text Datei wirst du mit Print # erstellen müssen. Habe es aber noch nie Probiert.
MFG
SJ
Antwort 2 von SJ
Textdatei kannste so erstellen:
Open "C:\Kontrolldatei.txt" For Output As #1
Print #1, "Mitglied-Name"; ";"; "Eintrittsdatum"; ";"; "E - Mail - Adresse"; ";"; "Dateinamen"
Close #1
Deine Felder z.B. Mietglied-Name kannst als Variable übergeben.Trennzeichen ist hier jetzt ;
MFG
SJ
Open "C:\Kontrolldatei.txt" For Output As #1
Print #1, "Mitglied-Name"; ";"; "Eintrittsdatum"; ";"; "E - Mail - Adresse"; ";"; "Dateinamen"
Close #1
Deine Felder z.B. Mietglied-Name kannst als Variable übergeben.Trennzeichen ist hier jetzt ;
MFG
SJ
Antwort 3 von Teddy
Zum Thema PDF erstellen hab ich mir mal folgendes notiert :
Funktion in beliebiges Modul stellen:
Public Function druckPDF(pnr, defPr)
Dim dru As Printer
Set Application.Printer = Application.Printers(pnr)
Set dru = Application.Printer
Debug.Print dru.DeviceName
DoCmd.PrintOut (acPrintAll)
Set Application.Printer = Application.Printers(defPr)
Set dru = Application.Printer
Debug.Print dru.DeviceName
End Function
Aufruf-Parameter:
pnr= Nr. des PDF-Writers
sefPr= Nr. des Standard-Druckers
Die Statements "Debug.Print" dienen nur zum ermitteln der richtigen Drucker und können nach Test entfernt werden. Du mußt ev. testen, welche Druckernummern den gewünschten Druckern Deiner Druckerliste entsprechen.
Wenn Du variable Zuordnung benötigst, mußt Du zusätzlich in einer Schleife die Drucker durchsuchen, bis der richtige Drucker gefunden wurde:
Dim i
i = 0
Do While True
Set dru = Application.Printers(i)
If dru.DeviceName = "Druckername" Then Exit Do
i = i + 1
Loop
'i enthält nun die Druckernummer
Für "Druckername" den gesuchten Drucker einsetzen. Nicht gefunden führt zu Fehler!
Nicht auf meinem Mist gewachsen und nicht getestet !!!
Gruß
Teddy
Funktion in beliebiges Modul stellen:
Public Function druckPDF(pnr, defPr)
Dim dru As Printer
Set Application.Printer = Application.Printers(pnr)
Set dru = Application.Printer
Debug.Print dru.DeviceName
DoCmd.PrintOut (acPrintAll)
Set Application.Printer = Application.Printers(defPr)
Set dru = Application.Printer
Debug.Print dru.DeviceName
End Function
Aufruf-Parameter:
pnr= Nr. des PDF-Writers
sefPr= Nr. des Standard-Druckers
Die Statements "Debug.Print" dienen nur zum ermitteln der richtigen Drucker und können nach Test entfernt werden. Du mußt ev. testen, welche Druckernummern den gewünschten Druckern Deiner Druckerliste entsprechen.
Wenn Du variable Zuordnung benötigst, mußt Du zusätzlich in einer Schleife die Drucker durchsuchen, bis der richtige Drucker gefunden wurde:
Dim i
i = 0
Do While True
Set dru = Application.Printers(i)
If dru.DeviceName = "Druckername" Then Exit Do
i = i + 1
Loop
'i enthält nun die Druckernummer
Für "Druckername" den gesuchten Drucker einsetzen. Nicht gefunden führt zu Fehler!
Nicht auf meinem Mist gewachsen und nicht getestet !!!
Gruß
Teddy

