Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Если вы хотите запустить код в одном приложении Microsoft Office, которое работает с объектами в другом приложении, выполните следующие действия.
Выполнение кода
Задайте ссылку на библиотеку типов другого приложения в диалоговом окне Ссылки (меню Сервис ). Затем объекты, свойства и методы появятся в обозревателе объектов, а синтаксис будет проверяться во время компиляции. Вы также можете получить контекстно-зависимые справки по ним.
Объявите переменные объекта, которые будут ссылаться на объекты в другом приложении как на определенные типы. Укажите для каждого типа имя приложения, которое предоставляет объект . Например, следующая инструкция объявляет переменную, указывающую на документ Microsoft Word, и другую, которая ссылается на книгу Microsoft Excel.
Dim appWD As Word.Application, wbXL As Excel.Workbook
Примечание Если вы хотите, чтобы код был привязан к началу, необходимо выполнить описанные выше действия.
Используйте функцию CreateObject с программными идентификаторами OLE объекта, с которым вы хотите работать в другом приложении, как показано в следующем примере. Чтобы просмотреть сеанс другого приложения, задайте для свойства Visible значение True.
Dim appWD As Word.Application Set appWD = CreateObject("Word.Application") appWd.Visible = True
Примените свойства и методы к объекту, содержамся в переменной. Например, следующая инструкция создает документ Word.
Dim appWD As Word.Application Set appWD = CreateObject("Word.Application") appWD.Documents.Add
Завершив работу с другим приложением, используйте метод 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 и обратная связь.