dazu findest Du einen sehr nützlichen Artikel auf der Site von WFlamme:
Auszug:
Die Automatisierung mit Microsoft Word hat einen Pferdefuß, der häufig nicht berücksichtigt wird: Generiert ein Programm eine neue, unsichtbare Word-Instanz und generiert der Benutzer danach manuell eine neue (aus seiner Sicht die erste) Word-Instanz, so verweisen beide auf dasselbe Objekt (Microsoft Knowledge Base Artikel Nr. Q188546).
Dim objWord as Variant
Set objWord=CreateObject({Word.Application})
objWord.Documents.Add {c:\temp\test.doc}
Debug.Print objWord.ActiveDocument.FullName 'liefert "c:\temp\test.doc"
'Tue irgendwas
'--> Benutzer betrachtet eine *.doc-Datei durch Doppelklick im Windows Explorer, z.B. c:\temp\malgucken.doc
'Tue irgendwas ist beendet
Debug.Print objWord.ActiveDocument.FullName 'liefert "c:\temp\malgucken.doc"
Der erforderliche Workaround sieht so aus, daß zwei Word-Instanzen erstellt werden, dann wird die erste (die, die vom Anwender geöffnet worden wäre) sofort wieder zerstört. Die zweite Instanz ist dann wirklich unabhängig und kann vom Code exklusiv genutzt werden.
Nachdem die Bookmark-basierten Lösungen ja nun ausreichend gut im Web dokumentiert sind, wollen wir zunächst einmal die Alternativlösung mittels Dokumentvariablen betrachten. Eine solche Lösung implementiert man am elegantesten als neue Klasse, die man dann in den verschiedensten Projekten wiederverwenden kann. Das Grundgerüst dieser Klasse soll dabei folgendes leisten:
der Konstruktor der Klasse muß eine unabhängige Word-Instanz bereitstellen, die nicht mit anderen Instanzen kollidiert
auf Bais einer zu übergebenden Feldliste soll eine .dot-Vorlage mit Dokumentvariablen-Feldern generiert werden; diese kann später unter Word nachbearbeitet/nachformatiert werden
auf Basis dieser .dot-Vorlage soll ein neues Word-Dokument erzeugt werden
die Dokumentvariablen des Word-Dokuments sollen beschrieben werden können
die Felder des Word-Dokuments müssen aktualisiert werden können
diese Vorgänge sollen im Hintergrund ablaufen, um den Benutzer nicht abzulenken
das Dokument soll ausgedruckt werden können
wenn die Word-Instanz nicht mehr benötigt wird, soll sie komplett entladen werden (Destruktor)
Die Übergabe des Vorlagennamens kann unter LotusScript als Argument des Konstruktors erfolgen, dies ist jedoch in VB/VBA nicht möglich. Um LotusScript- und VBA-Version einheitlich zu halten wurde stattdessen eine eigene Methode der Klasse implementiert. Hier nun zunächst die Umsetzung in eine einfache LotusScript-Klasse als Muster. Diese wird beispielsweise in eine ScriptLibrary wfWordInterface untergebracht (ich stelle meinen Library-Namen i.d.R. meine Initialien voran, um sie von den Libraries anderer einfach unterscheiden zu können):
Quelle: http://www.sns1.de/partner/flamme/wflamme.nsf/Shortcut/WordInterface1
... hier auf die schnelle ein Code-Schnipsel für Textmarken (Bookmarks) und anschließendem ausdrucken...
In a customer/sales tracking database we needed functionality to print out
letters using predefined word templates.
Include the code in a button and try it.
Code
'Defining variables
Dim myApp As Variant
Dim tmp as string
'Starting ms word as a ole object
Set myApp = CreateObject("Word.Application")
'Hiding word from the user
myApp.Visible = False
'Opening the template as a new doc, change tmp$ to the needed template path
myApp.Documents.Add (tmp$)
'Selecting what bookmark to write to
myApp.ActiveDocument.Bookmarks("WhoTo").Select
'Define what you need to write in tmp$
'Then write it to the bookmark
myApp.Selection.TypeText(tmp$)
'Setting word to print in the foreground, i do this to prevent the rest of the
code to execute before word is finished
myApp.Options.PrintBackground = False
'Starting printing
myApp.ActiveDocument.PrintOut
'Closing the word document without saving changes
myApp.Documents.Close(wdDoNotSaveChanges)
'Closing word
myApp.Application.Quit
'Releasing myapp
Set myApp = Nothing
Finished. We use this together with templates that uses sub forms that need
inputs from the user before launching the document. Please feel free to contact
us for any further information on this isue.
... wobei bei diesem Code die Konstante "wdDoNotSaveChanges" noch deklariert werden muß...
... der Fehler bei dir könnte sein, daß die .dot-Datei eventuell nicht vorliegt...
ata