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
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.
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.
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
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
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.
Feedback
Feedback senden und anzeigen für