Collapse column

Autor Thema: Office 2016 Excel VBA erstellt Word-Dokument aus Vorlage und soll dieses als PDF speichern  (Gelesen 2738 mal)

Offline Gert78

  • Newbie
  • *
  • Beiträge: 3
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2016
Servus.

Ich habe ein Adressverzeichnis in Excel. Per VBA wird zu einem gewünschten Teilnehmer ein Word-Dokument anhand einer Wordvorlage geöffnet. Im Dokument sind Textmarken, die gefüllt werden.
Das funktioniert prima.

Problem:
Das erstellte Word möchte ich als PDF unter vordefiniertem Namen (aus excel) speichern. Habe das schon als direktes speichern von Dokument1 probiert und auch so, dass ich erst das Word-Dokument speichere und dann das PDF erstelle (hab ich irgendwo gelesen).

Weder schaffe ich es, dass ich ein PDF erstelle, noch dass ich das Word speichere.
Wenn ich mein derzeitiges Makro starte, dann erscheint ein Laufzeitfehler '438' Objekt unterstützt diese Eigenschaft oder Methode nicht. Probiere da schon seit Stunden rum und hatte schon verschiedene Fehlermeldungen, aber aktuell kommt diese und ich finde nur noch Foreneinträge, die ich bereits probiert habe ...

Die Ideallösung wäre, wenn ich das aus der Vorlage erstellte Worddokument direkt als PDF speichern könnte und dann ohne speichern schließen.

Hat jemand eine Idee oder vielleicht sogar einen Code für mich?

Gekürztes Makro:
Sub Angebot_erstellen()

'   Definieren der Variablen
'   Excel
    Dim Adresse_Zeile1_quelle As String
    Adresse_Zeile1_quelle = [C2]
' [...]
' Die Vertragsnummer steht in Excel und soll später im PDF-Namen stehen
Dim Vertragsnummer1 As String
    Vertragsnummer1 = [M2]
   
'   Word
    Dim appWord As Object
    Dim v2 As Object
    Dim v3 As Object
    Dim v4 As Object

'   Vorbereitung Servicevertrag (v2)
    Set appWord = CreateObject("Word.Application")
    Set v2 = appWord.Documents.Add("Verzeichnis\dateiname.dotx")
    With v2
        appWord.Visible = True
        v2.Activate
    '   Adresse Zeile 1
        v2.Bookmarks("Adresse_Zeile1").Range.Text = Range(Adresse_Zeile1_quelle)
' [...]
        Dim strNameV2 As String
        strNameV2 = "Verzeichnis\dateiname_" & Vertragsnummer1 & ".pdf"
        Dim strNameV2Temp As String
        strNameV2Temp = "Verzeichnis\dateiname_temp"
       
' Hier will ich das Word Dokument speichern, weil in manchen Foren stand, dass das Worddokument gespeichert werden muss, bevor ein PDF erstellt wird. Krieg ich nur nicht hin ...

        .ActiveDocument.SaveAs2 Filename:=strNameV2Temp, _
            FileFormat:=wdFormatDocument

' Und hier versuche ich, das PDF zu erzeugen und scheitere, falls ich das als Word speichern weglasse

        .ExportAsFixedFormat OutputFileName:=strName, _
        ExportFormat:=17, _
        OpenAfterExport:=False
        .Close False
    End With
    appWord.Quit
'   zurücksetzen
    Set v2 = Nothing
    Set appWord = Nothing
   
End Sub

PDF speichern beginnt Zeile 37 und Word speichern (falls überhaupt notwendig) beginnt Zeile 32

Vielen Dank, viele Grüße und einen schönen Tag
Gert

Keine Lösung gefunden? Du kannst Dich gerne an unser erfahrenes Experten-Team wenden und Dein Anliegen in Auftrag geben.
>>> Schnell und einfach ein unverbindliches Angebot anfordern. Per E-Mail an anfrage@excel-inside.de oder per Online-Formular
<<<

!!! Wichtige Information
!!! Dieses Forum steht aus technischen Gründen ab dem 11. September 2019 nur noch im Lesemodus zur Verfügung.
Das NEUE Office-Fragen-Forum kannst du aber unter der gewohnten Domain https://office-fragen.de wie gewohnt nutzen.

- Wir freuen uns auf deinen Besuch im neuen Forum.

Offline maninweb

  • Global Moderator
  • Hero Member
  • *****
  • Beiträge: 1.063
    • Profil anzeigen
    • Excel Formula Translator
  • Office-KnowHow: Experte
  • VBA-KnowHow- : Sehr gut
  • Version [Office] : Office 2016
Hallo,

zum Entwickeln empfehle ich einen Verweis auf die Word-Objektbibliothek zu setzen. VBA-Editor, Extras, Verweise, MS Word Object Library.
Sobald Du das gemacht hast, kannst Du die Word-Variablen auch explizit deklarieren. Zum Beispiel:
Code: Visual Basic
  1. :
  2. Dim appWord As Word.Application
  3. Dim v2 As Word.Document
  4. :
  5.  
Und es steht Dir Intellisense zur Verfügung, was das Debuggen einfacher macht. Dann würdest Du merken, dass z.B.
Code: Visual Basic
  1. :
  2. With v2
  3. :
  4.   .ActiveDocument...
  5. :
  6.  
nicht zulässig ist, weil v2 keine Eigenschaft ActiveDocument besitzt. Die Variable v2 ist bereits Dein Dokument. Es würde
somit reichen...
Code: Visual Basic
  1. :
  2.   .SaveAs2 ...
  3. :
  4.  
Wenn Du Dein Projekt erfolgreich getestet hast, kannst Du wieder (wenn nötig) den Verweis auf Word entfernen und
die Variablendeklaration durch ... As Object ersetzen.

Gruß





Microsoft Excel Expert · Microsoft Most Valuable Professional (MVP) from 01/2011 - 06/2019
https://de.excel-translator.de :: Online Excel-Formel-Übersetzer :: Alle Übersetzungen der Excel Funktionen & Fehlerwerte

Offline Gert78

  • Newbie
  • *
  • Beiträge: 3
    • Profil anzeigen
  • Office-KnowHow: Fortgeschritten
  • VBA-KnowHow- : Mittelmäßig
  • Version [Office] : Office 2016
Servus maninweb.

Vielen Dank für die Infos zur Entwicklung. Das werde ich mir genauer anschauen. Bislang kam ich so zurecht, aber jetzt bin ich wohl soweit, dass ich da professioneller werden muss.

Und vielen Dank für den Hinweis auf .ActiveDocument. Das speichern als Word funktioniert schonmal :-)

Viele Grüße und noch einen schönen Tag
Gert
« Letzte Änderung: Dezember 10, 2015, 14:34:25 Nachmittag von Gert78 »

Wenn du dich noch intensiver mit Excel beschäftigen möchtest, dann empfiehlt sich ein Online-Kurs,
in dem du sehr viel über Excel erfährst und das gelernte umgehend in der Praxis anwenden kannst.