Live-Forum - Die aktuellen Beiträge
Anzeige
Archiv - Navigation
1140to1144
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

Procedur Aufruf Word öffnen

Procedur Aufruf Word öffnen
ing.grohn
Hallo Forum,
aus einer Excel-Anwendung rufe ich Word für den Ausdruck auf.
Dafür habe ich verschidene Proceduren.
Innerhalb dieser Proceduren, wiederholt sich folgende Sequenz:
Sub Brief()
Set ObjWord = GetObject("Word.Application")
If ObjWord Is Nothing Then
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = True
End If
On Error GoTo 0
If Not ObjWord Is Nothing Then
Set DocNeu = ObjWord.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("Handakte").Value)
End If
With DocNeu
Formfileds........
End With
End 

Sub
lediglich der letzte Teile (hier .Range("Handakte").Value) ist verschieden. Wie packe ich diese  _
Geschichte in einen Procedur-Aufruf?
Für eine Antwort recht herzlichen Dank.
Mit freundlichen Grüßen
Albrecht
Warum packt er den Rest in ein Programm?


		

5
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Benutzer
Anzeige
Word-Aufruf in Prozedur auslagern
01.03.2010 17:30:39
Erich
Hallo Albrecht,
so könnte das im Prinzip funktionieren:

Option Explicit
Sub Brief()
Dim DocNeu As Object
Call NeuDoc("Handakte", DocNeu)
If Not DocNeu Is Nothing Then
With DocNeu
'  Formfields........
End With
End If
End Sub
Sub NeuDoc(strTx As String, objDoc As Object)
Dim ObjWord As Application
Set ObjWord = GetObject("Word.Application")
If ObjWord Is Nothing Then
Set ObjWord = CreateObject("Word.Application")
ObjWord.Visible = True
End If
On Error GoTo 0
If Not ObjWord Is Nothing Then
Set objDoc = ObjWord.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
Rückmeldung wäre nett! - Grüße von Erich aus Kamp-Lintfort
Anzeige
AW: Word-Aufruf in Prozedur auslagern
01.03.2010 17:57:09
ing.grohn
Hallo Erich,
vielen Dank für die rasche Antwort. Ich finde, sieht sehr schlüssig aus.
Melde mich später noch mal obs geklappt hat.
Mit freundlichen Grüßen
Albrecht
AW: Word-Aufruf in Prozedur auslagern
01.03.2010 20:44:34
ing.grohn
Hallo Erich,
wenn ich in deiner SubDim ObjWord As Application durch Dim ObjWord As Object ersetze, läuft alles bis zur Aktivierung von Word (alle Elemente werden eingesetzt). Er stolpert dann über den Ausdruck des Documents bzw. das Schliessen von Word. Hier die gesamte Routine (hät ich gleich einsetzen sollen):
Sub Ueberweisung()
Dim DocNeu As Object
Dim ObjWord As Object
Dim Z As Long
Dim Drucker As String
Set frm3 = Uf_Ueberweisung
Drucker = Workbooks("Jutta.xls").Sheets("Konstanten").Range("Ausgabe").Value
Call NeuDoc("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 = wdAlertsNone
ObjWord.Application.Activate                                            'bis hier gehts
If Drucker = "Bildschirm" Then
ObjWord.AdctiveDocument.PrintPreview
Application.Wait TimeSerial(Hour(Now()), Minute(Now()), Second(Now()) + 10)
Else
ObjWord.Application.PrintOut
End If
ObjWord.ActiveDocument.Close (wdDoNotSaveChanges)
ObjWord.Application.Quit
Set DocNeu = Nothing
Set ObjWord = Nothing
End Sub
Mit freundlichen Grüßen
Albrecht
Anzeige
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
Anzeige
AW: Word-Aufruf in Prozedur auslagern
02.03.2010 09:31:09
ing.grohn
Hallo Erich,
funktioniert prima!
Vielen Dank!
Albrecht

Links zu Excel-Dialogen

Beliebteste Forumthreads (12 Monate)

Anzeige

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Anzeige