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:

  1. 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 .
  2. 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:

  1. Clase - Variante (String): una cadena que representa la definición formal (Application y ObjectType) del objeto. La clase es un parámetro requerido.
  2. 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 :

  1. Aplicación : el nombre de la aplicación de la que forma parte el objeto. |
  2. Tipo de objeto : el tipo de objeto que se crea. |

Algunas clases de ejemplo son:

  1. Aplicación de Word.
  2. Hoja de Excel
  3. Scripting.FileSystemObject

Demostrando GetObject y CreateObject

Función MSDN-GetObject

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


Modified text is an extract of the original Stack Overflow Documentation
Licenciado bajo CC BY-SA 3.0
No afiliado a Stack Overflow