seit einer Re-Installation meines Office-16-Pakets kommt bei der Ausführung des unten stehenden Codes die Meldung Fehler 429 - Objekterstellung durch ActiveX-komponenten nicht möglich.
Der Code ist in einer Excel-Datei (xlsm) eingebaut und wird aus einer User-Form per Comand-Button aufgerufen- Dabei ist der Druck eines Tabellenblattes der krönende Abschluss des Scripts.
Im Debugging meckert er sehr schnell und zuverlässig gleich die Zeile nach dem Kommentar Word starten an.
Diese Bibliotheken habe ich unter den Verweisen aktiviert:
Visual Basic for Applications
Microsoft Excel 16.0 Object-Library
Microsoft Word 16.0 Object-Library
Microsoft Office 16.0 Object-Library
Microsoft Forms 2.0 Object-Library
OLE Automation
Bei der Fehlersuche habe ich noch
Microsoft ActiveX Data Objects (Multi-dimensional) 6.0 Library
Microsoft ActiveX Data Objects 6.1 Library
Microsoft ActiveX Data Objects Recordset 6.0 Library
aktiviert hier ohne zu wissen, was ich tue 😉 hat sich einfach gut angehört aber auch nix gebracht.
Hier der Code
Dim ObjWordDok As Object
Dim ObjWord As Object
Dim Re_GpName1 As String
Re_GpName1 = "TestdruckKundenname"
'Dateinamen und -pfade festlegen für Papier-Kundenbeleg (ggf. für Doppel-Ausdruck noch veränderbar)
DokStart = ThisWorkbook.Path & "\20_Word-Vorlagen\Belegvorlage.docx"
DocPfadZiel = ThisWorkbook.Path & "\41_Kundenbelege\"
DocNameZiel = "Testdruck_Datei.docx"
DocZiel = DocPfadZiel & DocNameZiel
'Dateinamen und -pfade festlegen für Kassenbuch - nicht veränderlich!
DocPdfPfadZiel = ThisWorkbook.Path & "\31_Buchungsbelege\"
DocPdfNameZiel = "Testdruck_Datei.pdf"
DocPdfZiel = DocPdfPfadZiel & DocPdfNameZiel
' Wörd starten
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = False
' Ziel-Datei öffnen
Set ObjWordDok = ObjWord.Documents.Open(DokStart)
' Ziel-Datei unter neuem Name "speichern unter"
ObjWordDok.SaveAs2 (DocZiel)
' Check ob Bearbeitungsbereich geschützt; ggf. Schutz aufheben
If ObjWordDok.ProtectionType wdNoProtection Then ObjWordDok.Unprotect
'Werte von oben nach unten füllen:
ObjWordDok.FormFields("Dok_GpName1").Result = Re_GpName1
'speichern, ausdrucken und schließen
'bevor die Wordsitzung beendet und das Makro fertig ist
ObjWordDok.Save ' speichern
'Fragen, ob Papier erforderlich ist:
If MsgBox("Papier-Beleg notwendig?" & vbNewLine & _
"Ja = drucken", vbYesNo) = vbYes Then
Application.ActivePrinter = "HP Officejet 6500 E710a-f (Netzwerk) auf Ne03:" 'Drucker definieren
ObjWordDok.PrintOut
Application.Wait Now + TimeSerial(0, 0, 5) 'warum auch immer warten - nur so funzts
End If
'noch fürs Fianzamt kennzeichnen und als PDF sichern:
ObjWordDok.FormFields("Dok_EntwurfKennz").Result = "Entwurf f. Buchhaltung"
ObjWordDok.ExportAsFixedFormat OutputFileName:=DocPdfZiel, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=False, _
OptimizeFor:=wdExportOptimizeForPrint, Range:=wdExportAllDocument, _
From:=1, To:=1, Item:=wdExportDocumentContent, IncludeDocProps:=True, _
KeepIRM:=True, CreateBookmarks:=wdExportCreateNoBookmarks, _
DocStructureTags:=True, BitmapMissingFonts:=True, UseISO19005_1:=False
ObjWordDok.Close SaveChanges:=False 'schließen
ObjWord.Quit 'wörd schließen
' Word-Sitzung auch hier zu einem Ende bringen (Variablen entladen):
Set ObjWord = Nothing
Set ObjWordDok = Nothing
Exit Sub
Liegt es "nur" an der Auswahl der Bibliotheken, hat sich die Syntax geändert oder...?