Поделиться через


Controlling One Microsoft Office Application from Another

Если вы хотите запустить код в одном приложении Microsoft Office, которое работает с объектами в другом приложении, выполните следующие действия.

Выполнение кода

  1. Задайте ссылку на библиотеку типов другого приложения в диалоговом окне Ссылки (меню Сервис ). Затем объекты, свойства и методы появятся в обозревателе объектов, а синтаксис будет проверяться во время компиляции. Вы также можете получить контекстно-зависимые справки по ним.

  2. Объявите переменные объекта, которые будут ссылаться на объекты в другом приложении как на определенные типы. Укажите для каждого типа имя приложения, которое предоставляет объект . Например, следующая инструкция объявляет переменную, указывающую на документ Microsoft Word, и другую, которая ссылается на книгу Microsoft Excel.

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

    Примечание Если вы хотите, чтобы код был привязан к началу, необходимо выполнить описанные выше действия.

  3. Используйте функцию CreateObject с программными идентификаторами OLE объекта, с которым вы хотите работать в другом приложении, как показано в следующем примере. Чтобы просмотреть сеанс другого приложения, задайте для свойства Visible значение True.

      Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWd.Visible = True
    
  4. Примените свойства и методы к объекту, содержамся в переменной. Например, следующая инструкция создает документ Word.

    Dim appWD As Word.Application 
    
    Set appWD = CreateObject("Word.Application") 
    appWD.Documents.Add
    
  5. Завершив работу с другим приложением, используйте метод Quit , чтобы закрыть его, а затем задайте для его объектной переменной значение Nothing , чтобы освободить используемую память, как показано в следующем примере.

    appWd.Quit 
    Set appWd = Nothing
    

Пример кода, предоставляемый: Билл Jelen, MrExcel.com В следующем примере кода создается новый файл microsoft Office Word для каждой строки данных в электронной таблице.

' 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

Пример кода, предоставляемый: Деннис Валлентин (Dennis Wallentin), VSTO & .NET & Excel. В этом примере значения ячеек из именованного диапазона W_Data, содержащего три значения, вставляются в документ Word. Значения вставляются в закладки с именами td1, td2 и td3. Для выполнения этого примера необходимо иметь диапазон с именем W_Data , который содержит три значения на листе Sheet1 в книге. У вас должен быть Word документ с именемTest.docx сохранен в том же расположении, что и книга Excel, а Word документ должен содержать три закладки с именами td1, td2 и td3.

' 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

Сведения об участниках

Билл Джелен (Bill Jelen), MVP — автор больше двух десятков книг о Microsoft Excel. Он частый гость на TechTV вместе с Лео Лапорте (Leo Laporte) и ведет конференцию MrExcel.com, содержащую больше 300 000 вопросов об Excel и ответов на них.

Деннис Валлентин (Dennis Wallentin) — автор блога VSTO & .NET & Excel, посвященного решениям .NET Framework для Excel и службам Excel. Деннис разрабатывает решения Excel более 20 лет и также является соавтором книги "Professional Excel Development: The Definitive Guide to Developing Applications Using Microsoft Excel, VBA, and .NET (2nd Edition)".

Поддержка и обратная связь

Есть вопросы или отзывы, касающиеся Office VBA или этой статьи? Руководство по другим способам получения поддержки и отправки отзывов см. в статье Поддержка Office VBA и обратная связь.