Registriert seit: 18.03.2021
Version(en): Office 365
Ich habe eine Excel-Tabelle mit einer Userform. In die Userform werden Rechnungsdaten eingegeben, die ich dann an ein Worddokument übergeben und drucken möchte.
Zur Zeit läuft es so, dass nach Eingabe der Daten das Worddokument aufgerufen wird und alles weitere über Word bearbeitet bzw. gedruckt und gespeichert wird.
Mit folgendem Code öffne ich das Worddokument:
Dim objWordApp As Object
Dim wdDok As Object
Dim strPfad As String
strPfad = ThisWorkbook.Path & "\Vordrucke\Rechnung.docx"
Debug.Print Dir(strPfad)
Set objWordApp = CreateObject("Word.application")
With objWordApp
.Visible = True
.Activate
Set wdDok = .Documents.Open(strPfad)
End With
wdDok.MailMerge.OpenDataSource _
Name:=ThisWorkbook.Path & "\Dezernat_34_ESF-Berabeitung.xlsm", _
ReadOnly:=True, _
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Extended Properties='Excel 12.0 Macro';HDR=YES;", _
SQLStatement:="SELECT * FROM [Ausgabe$]"
Set objWordApp = Nothing
End Sub
Ich möchte den Code jetzt so erweitern, dass nicht nur das Dokument geöffnet wird, sondern das Dokument gedruckt und die Wordapplikation wieder geschlossen wird.
Habe am Wochenende schon so einige Codevarianten ausprobiert, aber so richtig funktioniert hat es nicht.
Drucken konnte ich zwar, aber es wurde "nur" die Entwurfansicht ohne die aktualisierten Serienbrieffelder gedruckt.
Hat vielleicht jemand ein Codebeispiel für mich?
Gruß
Royalty
Registriert seit: 26.09.2022
Version(en): 2019
Moin,
den Seriendruck führst du in Word mit .Execute() I'm Mailmerge-Objekt aus. Damit das Ziel der Drucker ist, musst du vorher die .Destination-Eigenschaft setzen.
Falls du nicht direkt an den Drucker senden willst, sondern in ein frisches Dokument, musst du zusätzlich beachten, dass du das neue Dokument erst aus der Documents-Auflistung raussuchen musst.
Viele Grüße
derHöpp
Registriert seit: 18.03.2021
Version(en): Office 365
Dim objWordApp As Object
Dim wdDok As Object
Dim strPfad As String
strPfad = ThisWorkbook.Path & "\Vordrucke\Rechnung.docx"
Debug.Print Dir(strPfad)
Set objWordApp = CreateObject("Word.application")
With objWordApp
.Visible = True
.Activate
Set wdDok = .Documents.Open(strPfad)
End With
wdDok.MailMerge.OpenDataSource _
Name:=ThisWorkbook.Path & "\Dezernat_34_ESF-Berabeitung.xlsm", _
ReadOnly:=True, _
Connection:="Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Extended Properties='Excel 12.0 Macro';HDR=YES;", _
SQLStatement:="SELECT * FROM [Ausgabe$]"
Set objWordApp = Nothing
wdDok.MailMerge.Destination = wdSendToPrinter
wdDok.MailMerge.Execute
End Sub
Jetzt wird das Dokument zwar gedruckt, aber der Druckauftrag wird "unendlich" eingefügt und der Befehl "wdDok.MailMerge.Execute" wird als "Fehler" makiert.
Gruß
Royalty
Registriert seit: 26.09.2022
Version(en): 2019
Hi,
hast du berücksichtigt, dass du für das SQL-Statement die Anführungszeichen Doppeln musst? Und ist dir bewusst, dass die Konstante wdSendToPrinter den Wert 1 haben muss, wenn du die Word-Klassenbibliothek nicht als Verweis in deinen Code eingebunden hast?
Einen "unendlichen" Druckauftrag kann ich nicht nachvollziehen. Bei mir gibt es auch keinen Fehler. Welcher Fehler wird dir angegeben?
Viele Grüße
derHöpp
Registriert seit: 18.03.2021
Version(en): Office 365
Wenn ich den Code, wie angegeben, ausführe, passiert folgendes:
1. Excel startet Word
2. öffnet das Worddokument
3. Das Dialogfenster "drucken" öffnet sich und ich sehe, wie der Druckauftrag unendlich an den Drucker geschickt wird. Hier kann ich nur abbrechen drücken, um dieses zu stoppen.
Die Fehlermeldung kommt sofort nachdem ich den Druck abbreche. Laufzeitfehler 5535 Diese Dokumente kontten in Word nicht vollständig zusammengeführt werden.
Der erste Ausdruck ist dann auch korrekt, wobei die weiteren Ausdrucke dann leer sind, vermutlich, weil der Druckbefehl "leere" Datensätze aus der Exceltabelle übergibt. Dabei habe ich eigentlich nur einen Datensatz, der eingefügt wird.
Registriert seit: 29.09.2015
Version(en): 2030,5
Zitat:Dabei habe ich eigentlich nur einen Datensatz, der eingefügt wird.
Würde ich kein 'Serien'druck nennen.
Dazu gibt es einfachere Methoden.
Registriert seit: 18.03.2021
Version(en): Office 365
(08.05.2023, 17:41)snb schrieb: Würde ich kein 'Serien'druck nennen.
Dazu gibt es einfachere Methoden.
Welche "einfachere" Methode gibt es denn?
Registriert seit: 29.09.2015
Version(en): 2030,5
Verwendung von DocVariable-fields.
Registriert seit: 18.03.2021
Version(en): Office 365
Die Excel-Tabelle wird für Berechnungen benötigt, wobei die Ergebnisse dann in das Word-Dokument übergeben werden sollen. Ich kenn mich jetzt mit DocVariable-fields nicht so aus, aber nachdem was ich bisher gelesen habe, scheint das für mich keine Lösung zu sein.
Grundsätzllich muß ich jetzt nur eine Lösung finden, wie ich den Druck, der ja jetzt funktioniert, nicht "unendlich" durch läuft.
Sollte doch irgendwie möglich sein.
Letztendlich möchte ich ja nur, dass nach Eingabe in die Userform, das Dokument direkt gedruckt wird, also der Zwischenschritt mit der Bearbeitung wegfällt. Ziel ist ein Ausdruck, den der Anwender zwischendurch nicht mehr ändern kann, sondern nur den fertigen Ausdruck bekommt
Registriert seit: 29.09.2015
Version(en): 2030,5
Zitat:Ich kenn mich jetzt mit DocVariable-fields nicht so aus, aber nachdem was ich bisher gelesen habe, scheint das für mich keine Lösung zu sein.
Dann ist besser lesen die Lösung, denn die Verwendung von
{DOCVARIABLE
} fields ist ohne Zweifel die beste Lösung.