Microsoft Excel

Herbers Excel/VBA-Archiv

Informationen und Beispiele zum Thema TextBox
BildScreenshot zu TextBox TextBox-Seite mit Beispielarbeitsmappe aufrufen

Procedur Aufruf Word öffnen | Herbers Excel-Forum


Betrifft: Procedur Aufruf Word öffnen von: ing.grohn
Geschrieben am: 01.03.2010 17:09:12

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?


  

Betrifft: Word-Aufruf in Prozedur auslagern von: Erich G.
Geschrieben am: 01.03.2010 17:30:39

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


  

Betrifft: AW: Word-Aufruf in Prozedur auslagern von: ing.grohn
Geschrieben am: 01.03.2010 17:57:09

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


  

Betrifft: AW: Word-Aufruf in Prozedur auslagern von: ing.grohn
Geschrieben am: 01.03.2010 20:44:34

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


  

Betrifft: Word-Aufruf in Prozedur auslagern von: Erich G.
Geschrieben am: 01.03.2010 21:15:01

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


  

Betrifft: AW: Word-Aufruf in Prozedur auslagern von: ing.grohn
Geschrieben am: 02.03.2010 09:31:09

Hallo Erich,
funktioniert prima!
Vielen Dank!
Albrecht


Beiträge aus den Excel-Beispielen zum Thema "Procedur Aufruf Word öffnen"