GetObject de VBA

Función Excel VBA GETOBJECT

Podemos usar la función GetObject en VBA en MS Excel para acceder a un objeto ActiveX desde el archivo de Excel y luego asignar el objeto a una variable de objeto. Para usar la tecnología OLE (Object Linking and Embedding) o COM (Compound Object Module) para controlar cualquier aplicación de Microsoft como MS Word, MS Outlook, MS PowerPoint e Internet Explorer, etc., podemos usar la función VBA GETOBJECT.

Usamos la función CreateObject para crear el objeto y la función GETOBJECT devuelve la referencia al objeto.

Sintaxis de la función GETOBJECT

La función GET OBJECT tiene estos argumentos con nombre:

  1. Pathname: Necesitamos especificar la ruta completa y el nombre del archivo que contiene el objeto a recuperar. Este es un argumento opcional, de hecho, ambos argumentos en la función GetObject son opcionales, pero si se omite 'nombre de ruta', se requiere el segundo argumento 'clase'.
  2. Clase : este también es un argumento opcional como se especificó anteriormente. Esto acepta una cadena que representa la clase del objeto.

Usamos la sintaxis 'appname.objecttype' para especificar el argumento de 'clase'.

  1. Nombre de la aplicación: Necesitamos especificar el nombre de la aplicación, que proporcionará el objeto.
  2. Tipo de objeto: especificamos el tipo de clase de objeto a crear.

Ejemplo de función Excel VBA GETOBJECT

Puede descargar esta plantilla GetObject de VBA aquí - Plantilla GetObject de VBA

Supongamos que tenemos un documento de Word que contiene 3 tablas.

Queremos escribir un código VBA que importe todas las tablas del documento a la hoja de Excel. Para hacer lo mismo, necesitaremos usar la función CreateObject y GetObject en VBA.

Los pasos serían:

  • Cree un archivo de Excel y guarde el archivo con la extensión de Excel .xlsm (Libro de trabajo habilitado para macros de Excel) ya que necesitaremos ejecutar el código VBA (una macro).
  • Abra el editor visual básico con una tecla de acceso directo (Alt + F11) o usando el comando 'Visual Basic' en el grupo 'Código' en la pestaña 'Desarrollador' en Excel.
  • Haga doble clic en 'Este libro de trabajo' en el lado izquierdo del editor de VBA y elija 'Libro de trabajo' de la lista que se muestra a continuación en la parte superior de la pantalla.

  • Elija 'Abrir' de la lista.

  • Ahora necesitamos escribir el código entre estas dos líneas.

  • Primero, declararemos variables para contener los objetos (documento de MS Word y objeto de aplicación de MS Word) y una 'Variable de cadena' para contener el nombre del documento de donde necesitamos extraer las tablas.

  • Para el manejo de errores, agregaremos una declaración, esta declaración le dice al programa VBA que ignore el error y reanude la ejecución con la siguiente línea de código. La declaración “On Error Resume Next” no corrige los errores de tiempo de ejecución, sino que simplemente significa que la ejecución del programa continuará desde la línea que sigue a la línea que causó el error.

  • Ahora usaremos la función GetObject para obtener acceso a la instancia actual del objeto de aplicación de Word.

  • Si en el caso, no hay una instancia actual de la aplicación MS Word o el componente ActiveX no puede crear un objeto o devolver una referencia a este objeto, entonces el error 429. Para esto, agregaremos a continuación dos líneas en el código. Después de manejar el error, necesitamos crear una instancia del objeto Aplicación de MS Word usando la función CreateObject .

  • Para hacer visible la aplicación MS Word, cambiaremos la propiedad visible del objeto 'WdApp' a TRUE .

  • Necesitamos encontrar la ubicación y el nombre de archivo del documento de Word desde el cual queremos importar las tablas a una hoja de Excel y asignar lo mismo al "strDocName". Para encontrar el nombre y la ubicación, podemos verificar las propiedades del archivo. .

Para abrir el cuadro de diálogo 'Propiedades' , simplemente seleccione el archivo y presione 'Alt + Enter' .

  • Si el archivo no existe en la ubicación especificada, el código devuelve el mensaje que indica "Los detalles de las marcas del archivo no se encontraron en la ruta de la carpeta". El título sería "Lo siento, ese nombre de documento no existe".

  • Ahora necesitamos activar la aplicación MS Word y asignar la variable 'wddoc' con el documento de Word que tiene el nombre del archivo almacenado en el 'strDocName' .

  • Si el archivo aún no está abierto, entonces debemos abrir el documento y activar la aplicación.

  • Después de activar el documento de Word, necesitamos acceder a las tablas del documento. Para hacer lo mismo, crearemos algunas variables.

Tble es la variable entera, que almacenará el recuento de tablas en el documento.

rowWd es la variable larga, que almacenará el número de filas en una tabla en particular.

colWd es la variable larga, que almacenará el número de columnas en una tabla en particular.

  • Necesitamos contar el número de tablas en el documento y si no hay ninguna tabla en el documento, mostraremos un cuadro de mensaje al usuario que dice "No se encontraron tablas en el documento de Word" .

  • Para acceder a las tablas en el documento y escribir el contenido en la hoja de Excel, ejecutaremos un bucle de VBA 'For' para una serie de tiempos de tablas y dentro de este bucle de VBA, ejecutaremos bucles 'for' anidados para acceder a cada fila y cada columna de la fila.

  • Como no queremos guardar el documento y salir de la aplicación. También deberíamos liberar la memoria del sistema. Para hacer lo mismo, escribiremos el siguiente código.

Ahora, cada vez que abrimos el archivo de Excel, el relleno se actualiza con el contenido de la tabla del documento de Word.

Código:

Private Sub Workbook_Open () Rem Declarar variables de objeto para acceder al objeto creado por GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declarar una variable de cadena para acceder al documento de Word Dim strDocName As String Rem Manejo de errores En el error Reanudar Siguiente Rem Activar MS Word si ya está abierto Establecer WdApp = GetObject (, "Word.Application") If Err.Number = 429 Then Err.Clear Rem Creando un objeto de aplicación de Word si MS Word aún no está abierto Establecer WdApp = CreateObject ("Word.Application") End Si WdApp.Visible = True strDocName = "C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx" Rem Verificando el directorio relevante para el documento relevante Rem Si no se encuentra, entonces informar al usuario y cerrar el programa If Dir (strDocName) = " "Luego MsgBox" El archivo "& strDocName & vbCrLf &"no se encontró en la ruta de la carpeta "& vbCrLf &" C: \ Users \ CBA7_01 \. ", _vbExclamation," Lo sentimos, el nombre del documento no existe ". Salir del Sub End If WdApp.Activate Set wddoc = WdApp.Documents (strDocName ) Si wddoc no es nada, establezca wddoc = WdApp.Documents.Open ("C: \ Users \ CBA7_01 \ Desktop \ Marks Details.docx") wddoc.Active Rem Defining variables para acceder a las tablas en el documento de Word Dim Tble As Integer Dim rowWd As Long Dim colWd As Integer Dim x As Long, y As Long x = 1 y = 1 Con wddoc Tble = wddoc.Tables.Count If Tble = 0 Then MsgBox "No se encontraron tablas en el documento de Word", vbExclamation, "No Tablas para importar "Exit Sub End If Rem Iniciando el proceso de bucle para acceder a tablas y sus filas, columnas Para i = 1 Para Tble Con .Tables (i) Para rowWd = 1 Para .Rows.Count Para colWd = 1 Para .Columns.Count Cells (x, y) = WorksheetFunction.Clean (.cell (rowWd, colWd) .Range.Text) Rem Accediendo a la siguiente columna y = y + 1 Siguiente colWd Rem Ir a la siguiente fila y comenzar desde la columna 1 y = 1 x = x + 1 Next rowWd End With Next End Con Rem no necesitamos guardar el documento de Word wddoc.Close Savechanges: = False Rem salimos de la aplicación de MS Word WdApp.Quit Rem Finalmente liberamos la memoria del sistema asignada para las 2 variables de objeto Set wddoc = Nothing Set WdApp = Nothing End SubSalir de Rem Finalmente liberamos la memoria del sistema asignada para las 2 variables de objeto Set wddoc = Nothing Set WdApp = Nothing End SubSalir de Rem Finalmente liberamos la memoria del sistema asignada para las 2 variables de objeto Set wddoc = Nothing Set WdApp = Nothing End Sub

Cosas para recordar

  1. Hay algún objeto de instancia única, para el que solo se genera una instancia del objeto, independientemente del número para el que se ejecuta CreateObject. La función GetObject en todo momento devuelve la misma instancia cuando se llama con una cadena de longitud cero y se produce un error si no se menciona el argumento 'nombre de ruta'.
  2. No podemos usar GetObject para acceder a una referencia a una clase creada con VBA.
  3. Si en el caso, no hay una instancia activa de la aplicación MS Word, o no queremos que el objeto se inicie con un archivo ya cargado, primero usamos la función CreateObject para crear el objeto y luego usamos la función GetObject para acceder al objeto.