Основная информация об автоматизации OLE с помощью VBA в Microsoft Excel
Если вы хотите использовать функции других приложений, вам нужно решить, хотите ли вы использовать раннее или позднее связывание объектных переменных.
Раннее связывание
Связывание между объектной переменной и объектом происходит при компиляции приложения.
Это приводит к повышению производительности по сравнению с тем, когда привязка выполняется при запуске приложения (поздняя привязка).
Если вы хотите создать раннюю привязку, вам нужно установить ссылку на «чужую» библиотеку объектов, которую вы хотите использовать.
Это делается из VBE с помощью меню Инструменты, Ссылки …. Когда VBProject имеет ссылку на библиотеку объектов, вы можете объявить определенные переменные объекта (например, Dim oDoc As Word.Document). Это также упростит программирование «посторонних объектов», поскольку VBE будет отображать ту же справку по программированию в отношении свойств, методов и событий, которые он отображает для объектов, принадлежащих приложению, с которым вы работаете (VBE автоматически добавил ссылку на это приложение заранее).
Это общий пример кода, показывающий ошибку автоматизации vba:
Sub OLEAutomationEarlyBinding() ' replace xxx with one of the following: ' Access, Excel, Outlook, PowerPoint or Word Dim oApp As xxx.Application ' early binding Dim oDoc As xxx.Document ' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation, Word.Document On Error Resume Next ' ignore errors Set oApp = GetObject(, "xxx.Application") ' reference an existing application instance If oApp Is Nothing Then ' no existing application is running Set oApp = New xxx.Application ' create a new application instance End If On Error GoTo 0 ' resume normal error handling If oApp Is Nothing Then ' not able to create the application MsgBox "The application is not available!", vbExclamation End If With oApp .Visible = True ' make the application object visible ' at this point the application is visible ' do something depending on the application... Set oDoc = .Documents.Open("c:\foldername\filename.doc") ' open a document ' ... oDoc.Close True ' close and save the document .Quit ' close the application End With Set oDoc = Nothing ' free memory Set oApp = Nothing ' free memory End Sub
Поздняя привязка
Связывание между объектной переменной и объектом происходит при запуске приложения.
Это приводит к снижению производительности по сравнению с тем, когда происходит привязка при компиляции приложения (раннее связывание).
Если вы не добавляете ссылку на библиотеку объектов, принадлежащую «чужому» приложению, вам необходимо объявить общие объектные переменные (например, Dim oDoc As Object). Это затруднит программирование «посторонних объектов», поскольку VBE не будет отображать ту же справку по программированию в отношении свойств, методов и событий, которые он отображает для объектов, принадлежащих приложению, с которым вы работаете.
Это общий пример кода:
Sub OLEAutomationLateBinding() ' replace xxx with one of the following: ' Access, Excel, Outlook, PowerPoint or Word Dim oApp As Object ' late binding Dim oDoc As Object ' late binding On Error Resume Next ' ignore errors Set oApp = GetObject(, "xxx.Application") ' reference an existing application instance If oApp Is Nothing Then ' no existing application is running Set oApp = CreateObject("xxx.Application") ' create a new application instance End If On Error GoTo 0 ' resume normal error handling If oApp Is Nothing Then ' not able to create the application MsgBox "The application is not available!", vbExclamation End If With oApp .Visible = True ' make the application object visible ' at this point the application is visible ' do something depending on the application... Set oDoc = .Documents.Open("c:\foldername\filename.doc") ' open a document ' ... oDoc.Close True ' close and save the document .Quit ' close the application End With Set oDoc = Nothing ' free memory Set oApp = Nothing ' free memory End Sub