Función GetObject
12/12/2018
6 minutos para leer
o
o
o
o
o
o +1
Devuelve una referencia a un objeto proporcionado por un componente
ActiveX.
Sintaxis
GetObject ([ nombre de ruta ], [ clase ])
La sintaxis de la función GetObject tiene estos argumentos con nombre :
SINTAX
Parte Descripción
nombre de Opcional; Variante ( cadena ). La ruta completa y el nombre del archivo que contiene el objet
ruta recuperar. Si se omite el nombre de la ruta , se requiere la clase .
clase Opcional; Variante ( cadena ). Una cadena que representa la clase del objeto.
El argumento de la clase usa la sintaxis appname . objecttype y tiene estas
partes:
TABL
Parte Descripción
nombre de la Necesario; Variante ( cadena ). El nombre de la aplicación que proporciona el
aplicación objeto.
tipo de objeto Necesario; Variante ( cadena ). El tipo o clase de objeto que se va a crear.
Observaciones
Utilice la función GetObject para acceder a un objeto ActiveX desde un archivo
y asignar el objeto a una variable de objeto . Utilice la instrucción Set para
asignar el objeto devuelto por GetObject a la variable de objeto. Por ejemplo:
VBCopiar
Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\[Link]")
Cuando se ejecuta este código, se inicia la aplicación asociada con el nombre de
ruta especificado y se activa el objeto en el archivo especificado.
Si el nombre de ruta es una cadena de longitud cero (""), GetObject devuelve
una nueva instancia de objeto del tipo especificado. Si se omite el
argumento del nombre de ruta , GetObject devuelve un objeto actualmente
activo del tipo especificado. Si no existe ningún objeto del tipo especificado, se
produce un error.
Algunas aplicaciones le permiten activar parte de un archivo. Agregue un signo
de exclamación ( ! ) Al final del nombre del archivo y siga con una cadena que
identifique la parte del archivo que desea activar. Para obtener información
sobre cómo crear esta cadena, consulte la documentación de la aplicación que
creó el objeto.
Por ejemplo, en una aplicación de dibujo, puede tener varias capas en un dibujo
almacenado en un archivo. Puede usar el siguiente código para activar una capa
dentro de un dibujo llamado [Link]:
VBCopiar
Set LayerObject = GetObject("C:\CAD\[Link]!Layer3")
Si no especifica la clase del objeto , la automatización determina la aplicación
que se iniciará y el objeto que se activará, según el nombre de archivo que
proporcione. Sin embargo, algunos archivos pueden admitir más de una clase
de objeto. Por ejemplo, un dibujo puede admitir tres tipos diferentes de
objetos: un objeto Aplicación , un objeto Dibujo y un objeto Barra de
herramientas , todos los cuales forman parte del mismo archivo. Para
especificar qué objeto en un archivo desea activar, use el argumento
de clase opcional . Por ejemplo:
VBCopiar
Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\[Link]", "[Link]")
En el ejemplo, FIGMENTes el nombre de una aplicación de dibujo y DRAWINGes uno
de los tipos de objetos que admite. Una vez que se activa un objeto, se hace
referencia a él en el código utilizando la variable de objeto que definió. En el
ejemplo anterior, accede a las propiedades y métodos del nuevo objeto
mediante la variable de objeto MyObject . Por ejemplo:
VBCopiar
[Link] 9, 90
[Link] 9, 100, "Hello, world."
[Link] "C:\DRAWINGS\[Link]"
Nota
Utilice la función GetObject cuando haya una instancia actual del objeto o si
desea crear el objeto con un archivo ya cargado. Si no hay una instancia actual y
no desea que el objeto se inicie con un archivo cargado, use
la función CreateObject .
Si un objeto se ha registrado como un objeto de instancia única, solo se crea
una instancia del objeto, sin importar cuántas veces se
ejecute CreateObject . Con un objeto de instancia única, GetObject siempre
devuelve la misma instancia cuando se llama con la sintaxis de cadena de
longitud cero ("") y provoca un error si se omite el argumento de nombre de
ruta . No puede usar GetObject para obtener una referencia a una clase creada
con Visual Basic.
Ejemplo
Este ejemplo usa la función GetObject para obtener una referencia a una hoja
de trabajo específica de Microsoft Excel ( MyXL). Utiliza la propiedad Application
de la hoja de trabajo para hacer visible Microsoft Excel, cerrarlo, etc.
Con dos llamadas a la API, el procedimiento DetectExcel Sub busca Microsoft
Excel y, si se está ejecutando, lo ingresa en la Tabla de objetos en ejecución.
La primera llamada a GetObject provoca un error si Microsoft Excel aún no se
está ejecutando. En el ejemplo, el error hace que la ExcelWasNotRunningbandera
se establezca en Verdadero .
La segunda llamada a GetObject especifica un archivo para abrir. Si Microsoft
Excel aún no se está ejecutando, la segunda llamada lo inicia y devuelve una
referencia a la hoja de trabajo representada por el archivo especificado,
[Link]. El archivo debe existir en la ubicación especificada; de lo
contrario, Automation errorse genera el error de Visual Basic .
A continuación, el código de ejemplo hace visibles tanto Microsoft Excel como
la ventana que contiene la hoja de trabajo especificada. Por último, si no se
estaba ejecutando una versión anterior de Microsoft Excel, el código usa
el método Quit del objeto Aplicación para cerrar Microsoft Excel. Si la
aplicación ya se estaba ejecutando, no se intenta cerrarla. La referencia en sí se
libera configurándola en Nothing .
VBCopiar
' Declare necessary API routines:
Declare Function FindWindow Lib "user32" Alias _
"FindWindowA" (ByVal lpClassName as String, _
ByVal lpWindowName As Long) As Long
Declare Function SendMessage Lib "user32" Alias _
"SendMessageA" (ByVal hWnd as Long,ByVal wMsg as Long, _
ByVal wParam as Long, _
ByVal lParam As Long) As Long
Sub GetExcel()
Dim MyXL As Object ' Variable to hold reference
' to Microsoft Excel.
Dim ExcelWasNotRunning As Boolean ' Flag for final release.
' Test to see if there is a copy of Microsoft Excel already running.
On Error Resume Next ' Defer error trapping.
' Getobject function called without the first argument returns a
' reference to an instance of the application. If the application isn't
' running, an error occurs.
Set MyXL = Getobject(, "[Link]")
If [Link] <> 0 Then ExcelWasNotRunning = True
[Link] ' Clear Err object in case error occurred.
' Check for Microsoft Excel. If Microsoft Excel is running,
' enter it into the Running Object table.
DetectExcel
' Set the object variable to reference the file you want to see.
Set MyXL = Getobject("c:\vb4\[Link]")
' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
[Link] = True
[Link](1).Visible = True
Do manipulations of your file here.
' ...
' If this copy of Microsoft Excel was not running when you
' started, close it using the Application property's Quit method.
' Note that when you try to quit Microsoft Excel, the
' title bar blinks and a message is displayed asking if you
' want to save any loaded files.
If ExcelWasNotRunning = True Then
[Link]
End IF
Set MyXL = Nothing ' Release reference to the
' application and spreadsheet.
End Sub
Sub DetectExcel()
' Procedure dectects a running Excel and registers it.
Const WM_USER = 1024
Dim hWnd As Long
' If Excel is running this API call returns its handle.
hWnd = FindWindow("XLMAIN", 0)
If hWnd = 0 Then ' 0 means Excel not running.
Exit Sub
Else
' Excel is running so use the SendMessage API
' function to enter it in the Running Object Table.
SendMessage hWnd, WM_USER + 18, 0, 0
End If
End Sub