Schau dir einmal die WORD-Automationsklasse von Axel Matthies an.
http://www.free.dominoserver.de/computer/noteslibrary.nsf/d2d59a3d7fc73a2bc1256a6900638352/331dd66d2239a1b2c1256dc50038f49e!OpenDocumentDie hilft dir vielleicht bei der Transformation von "klappt schon ganz gut" zu einem echten "funktioniert stabil und immer".
An den ersten Teilen siehst du schon, wie man Word öffnet, schließt und beendet. Deshalb ausschnittsweise ein wenig Code:
'--- Deklaration von API-Funktionen ---
Declare Function SetActiveWindow Lib "user32" Alias "SetActiveWindow" (Byval Hwnd As Long) As Long
Declare Function SetForegroundWindow Lib "user32" (Byval Hwnd As Long) As Long
Declare Function FindWindow Lib "user32" Alias "FindWindowA" (Byval ClassName As String, Byval lpWindowName As Long) As Long
'--- Klasse cWord Klasse mit Grundfunktionen
Class cWord
objWord As Variant
'Kontruktor - Prozedur
Sub New
Set objWord = Nothing
On Error Resume Next
Set objWord = GetObject("", "Word.Application")
If Err = 208 Then ' Fehler 208 tritt auf wenn Word noch nicht läuft
Err = 0
Set objWord = CreateObject("Word.Application")
objWord.Visible = True 'Word sichtbar machen
End If 'If Err = 208 Then
End Sub
'Destruktor-Prozedur
Sub Delete
Set objWord = Nothing
End Sub
'Beendet Word
Sub CloseWord
objWord.Quit 0
End Sub
'Bringt Word als Vollbild in den Vordergrund
Sub ActivateWord
Dim hWnd As Long
objWord.WindowState = 1 ' Application - Fenster auf Vollbild
hWnd = FindWindow("OPUSAPP", 0) 'Handle auf Wordfenster
If hWnd = 0 Then Exit Sub
Call SetActiveWindow(hWnd)
Call SetForegroundWindow(hWnd)
End Sub
'Neues Dokument auf Basis einer Vorlage erstellen. Name wird als Parameter übergeben.
Sub CreateNewDoc (strVorlage As String)
objWord.Documents.Add Rtrim$(strVorlage), False
End Sub
'Einfügen eines Textbausteins an einer Textmarke
Sub InsertAutoTextAtBM(strMarke As String, strTextbaustein As String)
objWord.ActiveDocument.Bookmarks(strMarke).Select ' Zu Textmarke springen
objWord.ActiveDocument.AttachedTemplate.AutoTextEntries(Cstr(strTextbaustein)).Insert(objWord.Selection.Range)
End Sub
...
Gruß
Norbert