Steuern einer Microsoft Office-Anwendung aus einer anderen

Wenn in einer Microsoft Office-Anwendung Code ausgeführt werden soll, der mit Objekten einer anderen Anwendung arbeitet, befolgen Sie diese Schritte:

So führen Sie den Code aus

  1. Legen Sie im Dialogfeld Verweise (Menü Tools) einen Verweis auf die Typbibliothek in der anderen Anwendung fest. Die Objekte, Eigenschaften und Methoden werden dann im Objektbrowser angezeigt und die Syntax wird zur Kompilierzeit überprüft. Sie können auch die kontextabhängige Hilfe für diese abrufen.

  2. Deklarieren Sie Objektvariablen, die auf die Objekte in der anderen Anwendung verweisen sollen, als bestimmte Typen. Geben Sie für jeden Typ den Namen der Anwendung an, die das Objekt bereitstellt. Die folgende Anweisung deklariert beispielsweise eine Variable, die auf ein Microsoft Word-Dokument und eine weitere, die auf eine Microsoft Excel-Arbeitsmappe verweist.

      Dim appWD As Word.Application, wbXL As Excel.Workbook
    

    Hinweis Sie müssen die vorherigen Schritte ausführen, wenn Ihr Code frühzeitig gebunden werden soll.

  3. Verwenden Sie die CreateObject-Funktion mit denOLE-ProgIDs des Objekts, mit denen Sie in der anderen Anwendung arbeiten möchten, wie im folgenden Beispiel dargestellt. Legen Sie zum Anzeigen der Sitzung der anderen Anwendung die Visible -Eigenschaft auf True fest.

      Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWd.Visible = True
    
  4. Wenden Sie die Eigenschaften und Methoden auf das in der Variablen enthaltene Objekt an. Mit der folgenden Anweisung wird beispielsweise ein neues Word-Dokument erstellt.

    Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWD.Documents.Add
    
  5. Verwenden Sie nach Abschluss der Arbeit mit der anderen Anwendung die Quit-Methode zum Schließen der Anwendung, und legen Sie dann ihre Objektvariable auf Nothing fest, um den von dieser verwendeten Speicher, wie im folgenden Beispiel dargestellt, freizugeben.

    appWd.Quit 
    Set appWd = Nothing
    

Beispielcode bereitgestellt von: Bill Jelen, MrExcel.com Im folgenden Codebeispiel wird eine neue Microsoft Office Word-Datei für jede Datenzeile in einer Kalkulationstabelle erstellt.

' You must pick Microsoft Word Object Library from Tools>References
' in the VB editor to execute Word commands.
Sub ControlWord()
    Dim appWD As Word.Application
    ' Create a new instance of Word and make it visible
    Set appWD = CreateObject("Word.Application.12")
    appWD.Visible = True

    ' Find the last row with data in the spreadsheet
    FinalRow = Range("A9999").End(xlUp).Row
    For i = 1 To FinalRow
        ' Copy the current row
        Worksheets("Sheet1").Rows(i).Copy
        ' Tell Word to create a new document
        appWD.Documents.Add
        ' Tell Word to paste the contents of the clipboard into the new document.
        appWD.Selection.Paste
        ' Save the new document with a sequential file name.
        appWD.ActiveDocument.SaveAs Filename:="File" & i
        ' Close the new Word document.
        appWD.ActiveDocument.Close
    Next i
    ' Close the Word application.
    appWD.Quit
End Sub

Beispielcode bereitgestellt von: Dennis Wallentin, VSTO & .NET & Excel In diesem Beispiel werden die Zellenwerte aus einem benannten Bereich W_Data, der drei Werte enthält, in ein Word Dokument eingefügt. Die Werte werden an den Stellen der Textmarken mit den Namen td1, td2 und td3 eingefügt. Zum Ausführen dieses Beispiels muss ein Bereich mit dem Namen W_Data vorhanden sein, der drei Werte für Sheet1 in der Arbeitsmappe enthält. Es muss auch ein Word-Dokument mit dem Namen Test.docx unter dem gleichen Speicherort wie die Excel-Arbeitsmappe gespeichert sein, und das Word-Dokument muss über drei Textmarken mit den Namen td1, td2 und td3 verfügen.

' You must pick Microsoft Word Object Library from Tools>References
' in the Visual Basic editor to execute Word commands.

Option Explicit

Sub Add_Single_Values_Word()
Dim wdApp As Word.Application
Dim wdDoc As Word.Document
Dim wdRange1 As Word.Range
Dim wdRange2 As Word.Range
Dim wdRange3 As Word.Range

Dim wbBook As Workbook
Dim wsSheet As Worksheet

Dim vaData As Variant

Set wbBook = ThisWorkbook
Set wsSheet = wbBook.Worksheets("Sheet1")

vaData = wsSheet.Range("W_Data").Value

' Instantiate the Word Objects.
Set wdApp = New Word.Application
Set wdDoc = wdApp.Documents.Open(wbBook.Path & "\Test.docx")

With wdDoc
    Set wdRange1 = .Bookmarks("td1").Range
    Set wdRange2 = .Bookmarks("td2").Range
    Set wdRange3 = .Bookmarks("td3").Range
End With

' Write values to the bookmarks.
wdRange1.Text = vaData(1, 1)
wdRange2.Text = vaData(2, 1)
wdRange3.Text = vaData(3, 1)

With wdDoc
    .Save
    .Close
End With

wdApp.Quit

' Release the objects from memory.
Set wdRange1 = Nothing
Set wdRange2 = Nothing
Set wdRange3 = Nothing
Set wdDoc = Nothing
Set wdApp = Nothing

End Sub

Informationen zu den Mitwirkenden

MVP Bill Jelen hat über zwei Dutzend Bücher über Microsoft Excel verfasst. Er ist regelmäßiger Gast auf TechTV mit Leo Laporte und hostet MrExcel.com, ein Forum mit über 300.000 Fragen und Antworten zu Excel.

Dennis Wallentin ist Autor des Blogs VSTO & .NET & Excel, dessen Schwerpunkt auf .NET Framework-Lösungen für Excel und Excel Services liegt. Dennis entwickelt Excel-Lösungen seit über 20 Jahren und ist Co-Autor von "Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA and .NET (2nd Edition)."

Support und Feedback

Haben Sie Fragen oder Feedback zu Office VBA oder zu dieser Dokumentation? Unter Office VBA-Support und Feedback finden Sie Hilfestellung zu den Möglichkeiten, wie Sie Support erhalten und Feedback abgeben können.