GetObject (función)

Devuelve una referencia a un objeto proporcionado por un componente de ActiveX.

Sintaxis

GetObject([ pathname ], [ class ])

La sintaxis de función GetObject tiene estos argumentos con nombre:

Parte Descripción
pathname Opcional; Variant (String). El nombre y la ruta de acceso completos del archivo que contiene el objeto que se va a recuperar. Si se omite el nombrerutaacceso, se requiere la clase.
class Opcional; Variant (String). Cadena que representa la clase del objeto.

El argumentode clase usa la sintaxis appname. objecttype y tiene estas partes:

Parte Descripción
appname Obligatorio; Variant (String). El nombre de la aplicación que proporciona el objeto.
objecttype Obligatorio; Variant (String). El tipo o la clase de objeto que se va a crear.

Comentarios

Use la función GetObject para obtener acceso a un objeto ActiveX desde un archivo y asignar el objeto a una variable de objeto. Use la instrucción Set para asignar el objeto devuelto por GetObject a la variable de objeto. Por ejemplo:

Dim CADObject As Object
Set CADObject = GetObject("C:\CAD\SCHEMA.CAD")

Cuando se ejecuta este código, se inicia la aplicación asociada al nombre de ruta de acceso especificado y se activa el objeto del archivo especificado.

Si el nombrerutaacceso 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 de acceso, GetObject devuelve un objeto activo actualmente 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 de archivo y síguelo 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 que tenga varias capas para un dibujo almacenado en un archivo. Puede usar el código siguiente para activar una capa dentro de un dibujo denominado SCHEMA.CAD:

Set LayerObject = GetObject("C:\CAD\SCHEMA.CAD!Layer3")

Si no especifica la clase del objeto, automation determina la aplicación que se va a iniciar y el objeto que se va a activar, en función del 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 de objetos diferentes: un objeto Application, un objeto Drawing y un objeto Toolbar, formando todos ellos parte del mismo archivo. Para especificar qué objeto de un archivo desea activar, use el argumento de clase opcional. Por ejemplo:

Dim MyObject As Object
Set MyObject = GetObject("C:\DRAWINGS\SAMPLE.DRW", "FIGMENT.DRAWING")

En el ejemplo, FIGMENT es el nombre de una aplicación de dibujo y DRAWING es uno de los tipos de objeto que admite. Una vez activado un objeto, haga referencia a él en el código mediante la variable de objeto que definió. En el ejemplo anterior, se obtiene acceso a las propiedades y métodos del nuevo objeto mediante la variable de objeto MyObject. Por ejemplo:

MyObject.Line 9, 90
MyObject.InsertText 9, 100, "Hello, world."
MyObject.SaveAs "C:\DRAWINGS\SAMPLE.DRW"

Nota:

[!NOTA] Use la función GetObject cuando hay una instancia actual del objeto o si desea crear el objeto con un archivo ya cargado. Si no hay ninguna 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 objeto de instancia única, solo se crea una instancia del objeto, sin importar cuántas veces se ejecuta CreateObject. Con un objeto de instancia única, GetObject siempre devuelve la misma instancia cuando se le llama con la sintaxis de cadena de longitud cero ("") y produce un error si se omite el argumento de nombrerutaacceso. No puede usar GetObject para obtener una referencia a una clase creada con Visual Basic.

Ejemplo:

En este ejemplo se usa la función GetObject para obtener una referencia a una hoja de cálculo específica de Microsoft Excel (MyXL). Si usa la propiedad Application de la hoja de cálculo para hacer Microsoft Excel visible, para cerrarlo, etc.

Con dos llamadas API, el DetectExcel procedimiento Sub busca Microsoft Excel y, si se está ejecutando, lo escribe en la tabla de objetos en ejecución.

La primera llamada a GetObject produce un error si Microsoft Excel no se está ejecutando ya. En el ejemplo, el error hace que la ExcelWasNotRunning marca se establezca en True.

La segunda llamada a GetObject especifica un archivo para abrirlo. Si Microsoft Excel no se está ejecutando ya, la segunda llamada lo inicia y devuelve una referencia a la hoja de cálculo representada por el archivo especificado, mytest.xls. El archivo debe existir en la ubicación especificada; de lo contrario, se genera el error de Visual Basic Automation error.

A continuación, el código de ejemplo hace que Microsoft Excel y la ventana que contiene la hoja de cálculo especificada sean visibles. Por último, si no hay ninguna versión anterior de Microsoft Excel en ejecución, el código usa el método Quit del objeto Application para cerrar Microsoft Excel. Si la aplicación ya se estaba ejecutando, no se intenta cerrarla. La propia referencia se libera estableciendo en Nothing.

' 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(, "Excel.Application")
    If Err.Number <> 0 Then ExcelWasNotRunning = True
    Err.Clear    ' 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\MYTEST.XLS")

' Show Microsoft Excel through its Application property. Then
' show the actual window containing the file using the Windows
' collection of the MyXL object reference.
    MyXL.Application.Visible = True
    MyXL.Parent.Windows(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 
        MyXL.Application.Quit
    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

Vea también

Soporte técnico y comentarios

¿Tiene preguntas o comentarios sobre VBA para Office o esta documentación? Vea Soporte técnico y comentarios sobre VBA para Office para obtener ayuda sobre las formas en las que puede recibir soporte técnico y enviar comentarios.