Información básica sobre la automatización OLE usando VBA en Microsoft Excel

Anonim

Cuando desee utilizar la funcionalidad de otras aplicaciones, debe decidir si desea utilizar
enlace temprano o tardío de 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 se produce el enlace 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 un
biblioteca de objetos puede declarar variables de objeto específicas (por ejemplo, Dim oDoc As Word.Document). Esto también lo hará
más fácil de 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 en la que está trabajando
de (el VBE ha agregado automáticamente la referencia a esta aplicación por adelantado).
Este es un ejemplo de código general que muestra un error de automatización de vba:

Sub OLEAutomationEarlyBinding () 'reemplace xxx con uno de los siguientes:' Access, Excel, Outlook, PowerPoint o Word Dim oApp As xxx.Application 'enlace temprano Dim oDoc As xxx.Document' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation , Word.Document On Error Resume Next 'ignorar errores Establecer oApp = GetObject (, "xxx.Application")' hacer referencia a una instancia de aplicación existente Si oApp no ​​es nada Entonces 'ninguna aplicación existente se está ejecutando Establecer oApp = New xxx.Application' crear una nueva instancia de aplicación End If On Error GoTo 0 'reanudar el manejo normal de errores Si oApp no ​​es nada Entonces' no se puede crear la aplicación MsgBox "¡La aplicación no está disponible!", vbExclamation End If With oApp .Visible = True 'hacer que la aplicación sea objeto visible 'en este punto la aplicación es visible' hacer algo dependiendo de la aplicación … Establecer oDoc = .Documents.Open ("c: \ nombrecarpeta \ nombrearchivo.doc") 'abrir un documento' … oDoc.Close True 'cerrar y guardar el documento .Quit 'cerrar la aplicación 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 "extranjera", debe
declarar 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 () 'reemplace xxx con uno de los siguientes:' Access, Excel, Outlook, PowerPoint o Word Dim oApp As Object 'enlace tardío Dim oDoc As Object' enlace tardío On Error Resume Next 'ignorar errores Set oApp = GetObject (, "xxx.Application") 'hace referencia a una instancia de aplicación existente Si oApp no ​​es nada Entonces' ninguna aplicación existente se está ejecutando Establecer oApp = CreateObject ("xxx.Application") 'crear una nueva instancia de aplicación End If On Error GoTo 0' reanudar el error normal manejo Si oApp no ​​es nada Entonces 'no se puede crear la aplicación MsgBox "¡La aplicación no está disponible!", vbExclamation End If With oApp .Visible = True' hacer que el objeto de la aplicación sea visible 'en este punto la aplicación es visible' hacer algo dependiendo en la aplicación … Establecer oDoc = .Documents.Open ("c: \ nombrecarpeta \ nombrearchivo.doc") 'abrir un documento' … oDoc.Close True 'cerrar y guardar el documento .Quit' cerrar la aplicación Finalizar con Establecer oDoc = Nothing 'free memory Set oApp = Nothing' fr ee memoria End Sub