Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1168to1172
Aktuelles Verzeichnis
Verzeichnis Index
Übersicht Verzeichnisse
Vorheriger Thread
Rückwärts Blättern
Nächster Thread
Vorwärts blättern
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

variablen anhand von zellinhalt

variablen anhand von zellinhalt
zellinhalt
Hallo
Mein erster Eintrag.
Problemstellung kurz:
ein in Excel gespeichertes Makro öffnet ein vorhandenes word dokument, füllt einige daten ein und soll dann als pdf gespeichert werden. der speicherpfad und der dateiname der zu erstellenden pdf soll aus werten, welche in zellen in der exceltabelle hinterlegt sind, generiert werden.
Folgender Code ist bereits vorhanden und nach langem Suchen nach einer Lösung bin ich, ohne Lösung, hier gelandet.
Ich hoffe, das Problem lässt sich irgendwie lösen. Besten Dank bereits im Voraus für Vorschläge.
Sub start_wordinvoice()
'Dieses Makro ist in Excel gespeichert
Dim wdApp As Object
Dim wdDoc As Object
Dim speicherpfad As String
Dim filename As String
Dim filenumber As String
speicherpfad = Worksheets("einstellungen_vorgänge").Range("G30").Value ' speicherpfadherkunft
filename = Worksheets("einstellungen_vorgänge").Range("G32").Value ' fester teil des  _
dateinamens
filenumber = Worksheets("einstellungen_vorgänge").Range("G37").Value ' fortlaufende  _
nummerierung des dateinamens
'öffnen der vorhandenen word vorlage (funktioniert)
'Open the word document
Set wdApp = CreateObject("Word.Application")
Set wdDoc = wdApp.documents.Open("Y:\rechnungsvorlage.dotm")
wdApp.Visible = True
' übergeben der Werte aus der exceltabelle an das worddokument (funktioniert)
'wdDoc.Bookmarks("username").Range.Text = Worksheets("einstellungen_vorgänge").Range("H38"). _
_
Value
'wdDoc.Bookmarks("datum").Range.Text = Worksheets("einstellungen_vorgänge").Range("H40"). _
Value
wdDoc.Bookmarks("rechnungsnr").Range.Text = Worksheets("einstellungen_vorgänge").Range("H37" _
_
).Value
wdDoc.Bookmarks("anzahl").Range.Text = Worksheets("einstellungen_vorgänge").Range("H39"). _
Value
wdDoc.Bookmarks("rechnungsbetrag1").Range.Text = Worksheets("printout_rechnungsbeilage"). _
Range("H30").Text
wdDoc.Bookmarks("rechnungsbetrag2").Range.Text = Worksheets("printout_rechnungsbeilage"). _
Range("H31").Text
wdDoc.Bookmarks("totalbetrag1").Range.Text = Worksheets("printout_rechnungsbeilage").Range(" _
_
H33").Text
wdDoc.Bookmarks("totalbetrag2").Range.Text = Worksheets("printout_rechnungsbeilage").Range(" _
_
H33").Text
' ab hier sollte die pdf version des worddokumentes erstellt werden (funktioniert nicht)
'Windows.wdApp("rechnungsvorlage.dotm").Activate
wdApp.Activate
wdDoc.Activate
'ChangeFileOpenDirectory _
speicherpfad
ActiveDocument.ExportAsFixedFormat OutputFileName:= _
speicherpfad & filename & filenumber _
, ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
ActiveWindow.Close savechanges:=no
End Sub

2
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
AW: VBA, Worddokument als PDF speichern
11.08.2010 00:01:53
fcs
Hallo Marco,
da waren ein paar Klippen drin.
Wichtig:
1. konsequent die Objektvariable mit dem zugewiesenen Worddokument benutzen
2. Wenn in der Exceldatei im VBA-Editor der Verweis auf die Microsoft Word x.y Object Library nicht gesetzt ist, dann müssen alle Word-VBA-Systemvariablen durch ihre meist nummerischen Werte ersetzt werden.
Ich würde auf Basis der Vorlage ein neues Dokument in Word anlegen - nicht die dotm-Datei öffnen.
Wenn schon die dotm-Datei geöffnet werden soll, dann schreibgeschütz, so dass sie nicht versehentlich überschrieben wird.
Auch die Exceltabellen sollten Objektvariablen zugeordnet werden. Man tut sich dann etws leichter in der Codepflege und Prozeduren werden meist übersichtlicher/kürzer.
Gruß
Franz
Sub start_wordinvoice()
'Dieses Makro ist in Excel gespeichert
Dim wdApp As Object
Dim wdDoc As Object
Dim speicherpfad As String
Dim filename As String
Dim filenumber As String
'Objekt-Variablen für die Exceltabellen
Dim wksVorgaenge As Worksheet, wksBeilage As Worksheet
'Variablen die Exceltabellen zuordnen macht den Code etwas übersichtlicher
Set wksVorgaenge = Worksheets("einstellungen_vorgänge")
Set wksBeilage = Worksheets("printout_rechnungsbeilage")
speicherpfad = wksVorgaenge.Range("G30").Value ' speicherpfadherkunft
filename = wksVorgaenge.Range("G32").Value ' fester teil des dateinamens
' fortlaufende nummerierung des dateinamens
filenumber = wksVorgaenge.Range("G37").Text
'öffnen der vorhandenen word vorlage (funktioniert)
'Word-Anwendungs-Objekt starten
Set wdApp = CreateObject("Word.Application")
' Die folgenden beiden Zeilen sind erforderlich nur wenn interaktiv Eingaben im _
Dokument gemacht werden müssen
'    wdApp.Visible = True
'    wdApp.Activate
'Open the word document
'Neues Dokumenten auf Basis der Vorlage anlegen
'    Set wdDoc = wdApp.documents.Add("Y:\rechnungsvorlage.dotm")
'Vorlagedatei schreibgeschützt öffnen
Set wdDoc = wdApp.documents.Open("Y:\rechnungsvorlage.dotm", ReadOnly:=True)
' übergeben der Werte aus der exceltabelle an das worddokument (funktioniert)
'wdDoc.Bookmarks("username").Range.Text = wksVorgaenge.Range("H38").Value
'wdDoc.Bookmarks("datum").Range.Text = wksVorgaenge.Range("H40").Value
wdDoc.Bookmarks("rechnungsnr").Range.Text = wksVorgaenge.Range("H37").Value
wdDoc.Bookmarks("anzahl").Range.Text = wksVorgaenge.Range("H39").Value
wdDoc.Bookmarks("rechnungsbetrag1").Range.Text = wksBeilage.Range("H30").Text
wdDoc.Bookmarks("rechnungsbetrag2").Range.Text = wksBeilage.Range("H31").Text
wdDoc.Bookmarks("totalbetrag1").Range.Text = wksBeilage.Range("H33").Text
wdDoc.Bookmarks("totalbetrag2").Range.Text = wksBeilage.Range("H33").Text
' ab hier sollte die pdf version des worddokumentes erstellt werden (funktioniert nicht)
'    wdDoc.ExportAsFixedFormat OutputFileName:= _
speicherpfad & filename & filenumber, _
ExportFormat:=wdExportFormatPDF, OpenAfterExport:=True, OptimizeFor:= _
wdExportOptimizeForPrint, Range:=wdExportAllDocument, From:=1, To:=1, _
Item:=wdExportDocumentContent, IncludeDocProps:=False, KeepIRM:=True, _
CreateBookmarks:=wdExportCreateNoBookmarks, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
'Wenn in VBA-Excel für die Datei mit dem Makro der Verweis auf die _
Microsoft Word x.y Objeject Library _
nicht gesetzt ist, dann müssen die Word-VBA-Variablen wd.... durch ihre _
numerischen Werte ersetzt werden.
wdDoc.ExportAsFixedFormat OutputFileName:= _
speicherpfad & filename & filenumber, _
ExportFormat:=17, OpenAfterExport:=True, _
OptimizeFor:=0, Range:=0, From:=1, To:=1, Item:=0, IncludeDocProps:=False, _
KeepIRM:=True, CreateBookmarks:=0, DocStructureTags:=True, _
BitmapMissingFonts:=True, UseISO19005_1:=False
wdDoc.Close savechanges:=False
wdApp.Quit
End Sub

Anzeige
AW: VBA, Worddokument als PDF speichern
11.08.2010 09:07:51
marco
Hallo Franz
Besten Dank für deine Hilfe, der Code funktioniert nun bestens. Ich habe auch deinen Vorschlag, jeweils ein neues Dokument zu öffnen berücksichtigt und umgesetzt.
Grüsse
Marco

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige