Hallo alle zusammen
Ich habe folgende Frage.
Eine Access Adressdatenbank in der ich für einen Serienbrief die Adressen aufbereite
und in einem separatem Formular ausgebe.
Von hier sollen die Adressen in ein Word Dokument mit Formularfeldern übertragen und dann
nacheinamder gedruckt werden.
Das Aufrufen und Eintragen der Adressdaten funktioniert mit dem folgenden Skribt:
Private Sub cmd_Serienbr_drucken_Click() 'Serienbrief mit WORD drucken
Dim word As Object
On Error GoTo WordStarten
'Der Versuch eine bestehende Instanz von WORD zu nutzen
Set word = GetObject(, "word.application")
If Not word Is Nothing Then
'Nach erzeugen der Objektinstanz wird der gewünschte Report geladen
word.Visible = True
word.Documents.Open FileName:=Pfad_Serienbrief 'Dateipfad und Name des Word Dokuments
'jetzt werden die Dateifelder gefüllt
word.ActiveDocument.FormFields("Anrede").Result = Anrede.Value
word.ActiveDocument.FormFields("Name1").Result = Name1.Value
word.ActiveDocument.FormFields("Name2").Result = Name2.Value
word.ActiveDocument.FormFields("Ortsteil").Result = Ortsteil.Value
word.ActiveDocument.FormFields("Straße").Result = Straße.Value
word.ActiveDocument.FormFields("PLZ").Result = PLZ.Value
word.ActiveDocument.FormFields("Wohnort").Result = Wohnort.Value
word.ActiveDocument.FormFields("Vorname").Result = Vorname.Value
End If
word.ActiveDocument.FormPrint 'ein Versuch den Druck auszulösen (leider mit Fehlermeldung
Exit Sub
WordStarten:
If Err = 429 Then
'Die Instanz war nicht vorhanden,wir müssen Word starten..
Set word = CreateObject("word.application")
GoTo Ausstieg
End If
'Err 13 kommt wenn ein Feld des Wordfoemulars nicht mit Daten besetzt werden kann
If Err <> 13 Then
'Word konnte nicht gefunden werden
MsgBox " Es ist ein Fehler aufgetreten!! ;-( !!" & vbCrLf & vbCrLf & "Err = " & Err
End If
Ausstieg:
Resume Next
End Sub
Wie kann ich den Direktdruck in Word starten und wie kann ich dann die nächsten Datensätze
aus dem Access Formular verarbeiten?
Der Skribt stammt (dort in einfacherer Form) aus dem Buch Programmier-Rezepte Access von
Walter Doberenz u. Thomas Gewinnus
Schon Im Voraus Dank für die Hilfe!
Ubbo
Hallo,
warum nimmst du nicht eine Serienbriefvorlage, dann brauchst du nicht jeden Datensatz einzeln zu übertragen.
Danke für den Tip
Da ich mich mit Serienbriefen in Word nicht auskenne folgende Nachfrage.
Die Adressdaten als ganzes,vermutlich mit Komma oder Semikolon separiert in eine Datei ausspielen, die dann von Word zu Serienbriefen verarbeitet wird?
Ist das so gemeint?
Gruß Ubbo
Du kannst als Datenquelle für den Serienbrief eine Access-Tabelle oder Abfrage einsetzen, sowie eine Textdatei oder auch Excel- oder Word-Tabelle.
Ich bevorzuge die Access-unabhängige Variante mit einer Excel-Tabelle, weil dann die Serienbriefvorlage auch leicht mal vom kundigen Anwender erstellt oder angepasst werden kann.
Die endgültige Vorlage wird von der Datenquelle getrennt und die Verbindung wird beim Aufruf des Serienbriefs aus Access heraus hergestellt.
Dies ist eine von vielen möglichen Varianten, die sich bei mir aber über die Jahre bewährt hat und am wenigsten Probleme bereitet.
Hallo und danke für den Tip
Ich habe noch einmal in den hiesigen Analen gestöbert und bin auf einen schon etwas älteren Hinweis gestossen, den ich dann umsetzen konnte. Den Serienbrief kann jeder halbwegs kundige erstellen, er muß nur einige Formularfelder mit festen Namen einbauen. Wenn ein Feld nicht ausgegeben werden soll, so muß es vorhanden sein, kann aber weiss dargestellt werden, so das es nicht zu sehen ist. Die Serienbriefdatei kann an beliebiger Stelle abgelegt werden, da der Pfad dahin abgefragt wird.
Hier noch einmal der komplett Skript für die Umsetzung
Private Sub cmd_Serienbr_drucken_Click() 'Serienbrief mit WORD drucken
Dim word As Object
Dim Anzahl As Double
Anzahl = zuDrAdr
'MsgBox " Anzahl = " & Anzahl
For i = 1 To Anzahl
On Error GoTo WordStarten
'Der Versuch eine bestehende Instanz von WORD zu nutzen
Set word = GetObject(, "word.application")
If Not word Is Nothing Then
'Nach erzeugen der Objektinstanz wird der gewünschte Report geladen
word.Visible = True
word.Documents.Open FileName:=Pfad_Serienbrief
'jetzt werden die Dateifelder gefüllt
word.ActiveDocument.FormFields("Anrede").Result = Anrede.Value
word.ActiveDocument.FormFields("Name1").Result = Name1.Value
word.ActiveDocument.FormFields("Name2").Result = Name2.Value
word.ActiveDocument.FormFields("Ortsteil").Result = Ortsteil.Value
word.ActiveDocument.FormFields("Straße").Result = Straße.Value
word.ActiveDocument.FormFields("PLZ").Result = PLZ.Value
word.ActiveDocument.FormFields("Wohnort").Result = Wohnort.Value
word.ActiveDocument.FormFields("Vorname").Result = Vorname.Value
End If
word.ActiveDocument.PrintOut
'zum nächsten Datensatz gehen
DoCmd.GoToRecord , , acNext
Next i
'Word beenden ohne das Dokument zu speichern
word.ActiveDocument.Close SaveChanges:=wdDoNotSaveChanges
word.Quit
Set word = Nothing
MsgBox " Alle Adressen gedruckt! "
DoCmd.Close
Exit Sub
WordStarten:
If Err = 429 Then
'Die Instanz war nicht vorhanden,wir müssen Word starten..
Set word = CreateObject("word.application")
GoTo Ausstieg
End If
'Err 13 kommt wenn ein Feld des Wordfoemulars nicht mit Daten besetzt werden kann
If Err <> 13 Then
'Word konnte nicht gefunden werden
MsgBox " Es ist ein Fehler aufgetreten!! ;-( !!" & vbCrLf & vbCrLf & "Err = " & Err
End If
Ausstieg:
Resume Next
Danke für die Ratschläge, auch wenn ich es anders realisiert habe. :)
Ich finde hier klappt das mit der Hilfe fantastisch und ich werde in Zukunft öfter mal reinschauen.
Vielleicht kann ich auch einmal jemandem Helfen.
Viel Spass weiter mit Access und Gruß Ubbo