información básica sobre la automatización OLE con VBA en Microsoft Excel
Cuando desee utilizar la funcionalidad de otras aplicaciones, debe decidir si desea utilizar la vinculación temprana o tardía de las variables de objeto.
Enlace anticipado
El enlace entre la variable de objeto y el objeto tiene lugar cuando se compila la aplicación.
Esto da como resultado un mejor rendimiento en comparación con cuando el enlace tiene lugar cuando se ejecuta la aplicación (enlace tardío).
Si desea crear un enlace anticipado, debe establecer una referencia a la biblioteca de objetos «ajenos» que desea utilizar.
Esto se hace desde el VBE usando el menú Herramientas, Referencias … Cuando un VBProject tiene una referencia a una biblioteca de objetos, puede declarar variables de objeto específicas (por ejemplo, Dim oDoc As Word.Document). Esto también hará que sea más fácil programar los «objetos extraños» ya que el VBE mostrará la misma ayuda de programación con respecto a las propiedades, métodos y eventos que muestra para los objetos que pertenecen a la aplicación desde la que está trabajando (el VBE ha agregado automáticamente el referencia a esta solicitud por adelantado).
Este es un ejemplo de código general que muestra un error de automatización de 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
Encuadernación tardía
El enlace entre la variable de objeto y el objeto tiene lugar cuando se ejecuta la aplicación.
Esto da como resultado un rendimiento más lento en comparación con cuando se produce el enlace cuando se compila la aplicación (enlace anticipado).
Si no agrega una referencia a la biblioteca de objetos que pertenece a la aplicación «externa», debe declarar las variables de objeto generales (por ejemplo, Dim oDoc As Object). Esto hará que sea más difícil programar los «objetos extraños» ya que el VBE no mostrará la misma ayuda de programación con respecto a las propiedades, métodos y eventos que muestra para los objetos que pertenecen a la aplicación desde la que está trabajando.
Este es un ejemplo de código general:
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