VBA
CreateObject vs. GetObject
Buscar..
Observaciones
En su forma más simple, CreateObject
crea una instancia de un objeto, mientras que GetObject
obtiene una instancia existente de un objeto. Determinar si un objeto se puede crear o obtener dependerá de su propiedad de Instancing . Algunos objetos son SingleUse (por ejemplo, WMI) y no se pueden crear si ya existen. Otros objetos (por ejemplo, Excel) son MultiUse y permiten que varias instancias se ejecuten a la vez. Si aún no existe una instancia de un objeto e intenta GetObject
, recibirá el siguiente mensaje atrapable: Run-time error '429': ActiveX component can't create object
.
GetObject requiere que al menos uno de estos dos parámetros opcionales esté presente:
- Nombre de ruta - Variante (cadena): la ruta completa, incluido el nombre de archivo, del archivo que contiene el objeto. Este parámetro es opcional, pero se requiere clase si se omite el nombre de ruta .
- Clase - Variante (String): una cadena que representa la definición formal (Application y ObjectType) del objeto. Se requiere clase si se omite el nombre de ruta .
CreateObject tiene un parámetro requerido y un parámetro opcional:
- Clase - Variante (String): una cadena que representa la definición formal (Application y ObjectType) del objeto. La clase es un parámetro requerido.
- Servername - Variant (String): el nombre del equipo remoto en el que se creará el objeto. Si se omite, el objeto se creará en la máquina local.
La clase siempre se compone de dos partes en forma de Application.ObjectType
:
- Aplicación : el nombre de la aplicación de la que forma parte el objeto. |
- Tipo de objeto : el tipo de objeto que se crea. |
Algunas clases de ejemplo son:
- Aplicación de Word.
- Hoja de Excel
- Scripting.FileSystemObject
Demostrando GetObject y CreateObject
Devuelve una referencia a un objeto proporcionado por un componente ActiveX.
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 comience con un archivo cargado, use la función CreateObject.
Sub CreateVSGet()
Dim ThisXLApp As Excel.Application 'An example of early binding
Dim AnotherXLApp As Object 'An example of late binding
Dim ThisNewWB As Workbook
Dim AnotherNewWB As Workbook
Dim wb As Workbook
'Get this instance of Excel
Set ThisXLApp = GetObject(ThisWorkbook.Name).Application
'Create another instance of Excel
Set AnotherXLApp = CreateObject("Excel.Application")
'Make the 2nd instance visible
AnotherXLApp.Visible = True
'Add a workbook to the 2nd instance
Set AnotherNewWB = AnotherXLApp.Workbooks.Add
'Add a sheet to the 2nd instance
AnotherNewWB.Sheets.Add
'You should now have 2 instances of Excel open
'The 1st instance has 1 workbook: Book1
'The 2nd instance has 1 workbook: Book2
'Lets add another workbook to our 1st instance
Set ThisNewWB = ThisXLApp.Workbooks.Add
'Now loop through the workbooks and show their names
For Each wb In ThisXLApp.Workbooks
Debug.Print wb.Name
Next
'Now the 1st instance has 2 workbooks: Book1 and Book3
'If you close the first instance of Excel,
'Book1 and Book3 will close, but book2 will still be open
End Sub