Word-Aufruf in Prozedur auslagern
01.03.2010 21:15:01
Erich
Hallo ,
wenn du die Word.Application auch in der aufrufenden Hauptprozedur brauchst,
muss das etwas anders aussehen:
Option Explicit
Sub Ueberweisung()
Dim ObjWord As Object
Dim DocNeu As Object
Dim Z As Long
Dim Drucker As String
Set frm3 = Uf_Ueberweisung
Drucker = Workbooks("Jutta.xls").Sheets("Konstanten").Range("Ausgabe").Value
Set ObjWord = GetObject("Word.Application")
If ObjWord Is Nothing Then
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = True
End If
Call NeuDoc(ObjWord, "Ueberweisungen", DocNeu)
If Not DocNeu Is Nothing Then
With DocNeu
.FormFields("Vorname").Result = frm3.TextBox1.Value 'Vorname
.FormFields("Konto").Result = frm3.TextBox2.Value 'Konto
.FormFields("Blz").Result = frm3.TextBox3.Value 'BLZ
.FormFields("Bank").Result = frm3.TextBox9.Value 'Bank
.FormFields("Betrag").Result = frm3.TextBox4.Value 'Betrag
.FormFields("Zweck1").Result = frm3.TextBox5.Value 'Verwendung1
.FormFields("Zweck2").Result = frm3.TextBox6.Value 'Verwendung2
.FormFields("eName").Result = frm3.TextBox7.Value 'eName
.FormFields("eKonto").Result = frm3.TextBox8.Value 'eKonto
.FormFields("Datum").Result = Date
End With
End If
ObjWord.Application.DisplayAlerts = 0 ' ( 0 = wdAlertsNone )
ObjWord.Application.Activate 'bis hier gehts
If Drucker = "Bildschirm" Then
ObjWord.ActiveDocument.PrintPreview
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 10)
Else
ObjWord.Application.PrintOut
End If
ObjWord.ActiveDocument.Close 0 ' (0 = wdDoNotSaveChanges)
ObjWord.Application.Quit
Set DocNeu = Nothing
Set ObjWord = Nothing
End Sub
Sub NeuDoc(objWrd As Object, strTx As String, objDoc As Object)
If Not objWrd Is Nothing Then
Set objDoc = objWrd.Documents.Add(Template:= _
Workbooks("Jutta.xls").Sheets("Konstanten").Range("aLW").Value _
& Workbooks("Jutta.xls").Sheets("Konstanten").Range("Vorlagen").Value _
& Workbooks("Jutta.xls").Sheets("Konstanten").Range(strTx).Value)
End If
End Sub
Hier wird Word in der Hauptroutine gestartet, die Appl. wird per Parameter an NeuDoc übergeben.
Die beiden vorkommenden Word-Konstanten (wdAlertsNone und wdDoNotSaveChanges) habe ich durch
die gleichwertige Zahl 0 ersetzt, um ohne den Verweis auch MS Word Object Lib (MSWORD.OLB) auszukommen.
Du könntest noch ausprobieren, ob man überall "ObjWord.Application" durch "ObjWord" ersetzen kann,
schließlich ist ObjWord ja gerade die Application.
(Ich kann deinen Code so nicht testen, müsste mir selbst erst eine Umgebung bauen.)
In deinem Code war wohl auch ein Dreckfehler: ;-)
ObjWord.AdctiveDocument.PrintPreview
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort