585 Aufrufe
Gefragt in Tabellenkalkulation von ahorn38 Experte (3.2k Punkte)

Hallo,

in einem Excel-Code erzeuge ich einige Textbausteine, die ich in einer string-Variablen zwischenspeichere und dann in in einer word-Vorlage abspeichere.

Dim AppWD, wordDoku As Object
Set AppWD = CreateObject("Word.Application") 'Word als Object starten
AppWD.Visible = True
Set wordDoku = AppWD.documents.Open(Filename:="C:\Users\User\Downloads\TCW Brief.dotm")
AppWD.ActiveDocument.Shapes.Range(Array("Text Box 41")).Select
AppWD.Selection = strMaster1                                                              
AppWD.ActiveDocument.Shapes.Range(Array("Textfeld 2")).Select
AppWD.Selection = strMaster2                                                              
AppWD.ActiveDocument.SaveAs "C:\Users\User\Downloads\BegrSchr - " & Cells(iRow, 4) & ", " & Cells(iRow, 5) & ".docx"
oder:
AppWD.documents("C:\Users\User\Downloads\TCW Brief.dotm").SaveAs "C:\Users\User\Downloads\BegrSchr - " & Cells(iRow, 4) & ", " & Cells(iRow, 5) & ".docx"

Der Code läuft fehlerfrei und das word-Dokument wird korrekt erzeugt.

Wenn ich das Dokument später wieder im Word öffnen will, wird mir allerdings nichts mehr angezeigt, obwohl die Datei im Explorer korrekt zufinden ist und in der Explorer-Vorschau auch den richtigen Inhalt hat.

Woran kann das liegen? Das passiert bei jedem Versuch und unterschiedlichen Inhalten.

Hat jemand einen Tipp?

Danke und Gruß

A.

19 Antworten

0 Punkte
Beantwortet von steffen2 Experte (6.4k Punkte)

so klappt es bei mir in einer Datei:

docMeinDokument.ExportAsFixedFormat "D:\temp\asdf.pdf", wdExportFormatPDF

Gruß Steffen2

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)

Danke, für euer Engagement!

Ich habe das so getestet und erhalte den Fehler:"Variable nicht definiert" bei 

wdExportFormatPDF
Das passt doch gar nicht!?
A.
0 Punkte
0 Punkte
Beantwortet von flupo Profi (17.7k Punkte)
Ich hatte geschrieben, dass du mit SaveAs und nicht mit ExportAsFixedFormat testen sollst.

Möglicherweise ist es aber doch ein Problem, dass das Word-Funktionen sind und dein Makro in Excel läuft.

Gruß Flupo
0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Hallo Flupo,

ich hatte auch saveas getestet. Das läuft ohne Fehler, die .pdf lässt sich allerdings nicht öffnen. Ich probiere jetzt noch einmal ein ganz einfaches Testbeispiel mit einem anderen word-Dokument außerhalb meines bisherigen codes. Mal sehen, ob ich da rauskriege, wo das Problem liegt.....

Gruß A.
0 Punkte
Beantwortet von xlking Experte (1.5k Punkte)

Hallo A.

du bist schon auf dem richtigen Weg. Musst nur die Meldung richtig interpretieren: 

erhalte den Fehler:"Variable nicht definiert" bei 

wdExportFormatPDF

Das bezieht sich auf die übergebenen Argumente. Bei wdFormatPDF und wdExportFormatPDF handelt es sich um Konstanten die im Prinzip auch nur Variablen mit einem festen Wert dahiner sind. Da dein Code allerdings in Excel und nicht in Word läuft, kennt er diese Konstanten nicht. Du kannst sie entweder mit Const wdFormatPDF = 17 am Modulanfang (oder am Anfang der Sub-Prozedur) in Excel definieren oder du ersetzt den Text wdFormatPDF gleich durch die Zahl 17 als übergebenes Argument. Beides sollte dann ohne Probleme laufen. Den Wert einer solchen Konstante findest du leicht über den Objektkatalog von Word oder in der Microsoft Dokumentation heraus. Dieser Wert ist für beide Konstanten = 17.

PS: AppWd.Activedocument würde ich in deinem Code durch wordDoku ersetzen, denn das Aktive Dokument kann schnell mal wechseln und dann speicherst du u.U. das falsche Dokument ab. Da du mit wordDoku bereits eine Variable für dein Dokument hast kannst du diese auch verwenden.

Gruß Mr. K.

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)

Hallo Mr.K,

super, das klingt plausibel. Ich bin schon auf die 17 gest0ßen bei meiner Recherche nach dem Code, wußte aber nichts damit anzufangen.

Ich habe jetzt 

AppWD.wordDoku.ExportAsFixedFormat , FileFormat:=17, Filename:=Pfad, OpenAfterPublish:=False

als neuen Code erhalte aber "benanntes Argument nicht gefunden" als Fehler. Hast du da auch noch eine Idee?

Danke und Gruß A.

0 Punkte
Beantwortet von ahorn38 Experte (3.2k Punkte)
Bearbeitet von ahorn38

Hallo zusammen,

Geschafft! Danke euch für die vielen Tipps und Hilfen über die vielen Stationen!!

Falls jemand den Code einmal verwenden möchte um aus Excel eine .docx Datei zu erstellen und anschließend als .docx und als .pdf zu speichern:

........

Dim AppWD, wordDoku As Object
Set AppWD = CreateObject("Word.Application") 'Word als Object starten
AppWD.Visible = True
Set wordDoku = AppWD.Documents.Add("C:\Users\User\Documents\Brief.dotx")    
AppWD.ActiveDocument.Shapes.Range(Array("Text Box 41")).Select
AppWD.Selection = strMaster1                                                                            
AppWD.ActiveDocument.Shapes.Range(Array("Textfeld 2")).Select
AppWD.Selection = strMaster2                                                                            
Pfad = "C:\Users\User\Documents\x".pdf"
AppWD.ActiveDocument.SaveAs2 "C:\Users\User\Documents\x" & ".docx"
AppWD.ActiveDocument.ExportAsFixedFormat Pfad, 17
wordDoku.Save
wordDoku.Close SaveChanges:=True
Set AppWD = Nothing
........

Sieht so einfach aus und hat mich Tage gekostet. Allerdings kann ich in Zeile 11 "ActiveDocument" nicht durch "wordDoku" ersetzen, um Verwechslungen zu vermeiden. Den Grund verstehe ich nicht, da alles andere funktioniert.

Danke und Gruß A.

0 Punkte
Beantwortet von steffen2 Experte (6.4k Punkte)

du sollst auch nicht Activedocument sondern AppWd.Activedocument damit ersetzen.

Ansonsten kann es theoretisch passieren, dass du, während der Code ausgeführt wird, in eine andere zufällig offene Word-Datei klickst. Dann wird diese weiter bearbeitet.

Wenn dein Code aber so kompakt innerhalb 1 Sekunde abläuft, dann ist die Gefahr gering.

Gruß Steffen2

...