VBA GetObject - ¿Cómo usar la función GetObject en Excel VBA?

Tabla de contenido

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 la función GETOBJECT de Excel 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 método abreviado (Alt + F11) o use el comando 'Visual Basic' en el grupo 'Código' en la pestaña 'Desarrollador' en Excel.
  • Haga doble clic en 'ThisWorkbook' en el lado izquierdo del editor de VBA y seleccione 'Workbook' 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 instrucción “On Error Resume Next” no corrige los errores de tiempo de ejecución, pero 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 caso de que no haya una instancia actual de la aplicación MS Word, o el componente ActiveX no pueda 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 del archivo del documento de Word desde el cual queremos importar las tablas en 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 dice: "El archivo Marks Details no se encontró 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 de archivo almacenado en '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 la cantidad de tablas en el documento, y si hay notables 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 un número de tablas, y dentro de este bucle de VBA, ejecutaremos bucles 'for' anidados para acceder a cada fila y todas las columnas 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 Declarando variables de objeto para acceder al objeto creado por GETOBJECT Dim WdApp As Object, wddoc As Object Rem Declarando una variable de cadena para acceder al documento de Word Dim strDocName As String Rem Manejo de errores En el error Reanudar Siguiente Rem Activando MS Word 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 If 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 For i = 1 To Tble With.Tables (i) For rowWd = 1 To .Rows.Count For colWd = 1 To .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 = Nada configurado WdApp = Nada 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. Existe algún objeto de instancia única, para el cual 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 .

Articulos interesantes...