Ricerca…


Osservazioni

Nel modo più semplice, CreateObject crea un'istanza di un oggetto, mentre GetObject ottiene un'istanza esistente di un oggetto. Determinare se un oggetto può essere creato o ottenuto dipenderà dalla sua proprietà di Instancing . Alcuni oggetti sono SingleUse (ad esempio, WMI) e non possono essere creati se già esistono. Altri oggetti (ad esempio Excel) sono MultiUse e consentono l'esecuzione di più istanze contemporaneamente. Se un'istanza di un oggetto non esiste già e si tenta GetObject , si riceverà il seguente messaggio intercettabile: Run-time error '429': ActiveX component can't create object .

GetObject richiede che almeno uno di questi due parametri opzionali sia presente:

  1. Pathname - Variant (String): il percorso completo, incluso il nomefile, del file che contiene l'oggetto. Questo parametro è facoltativo, ma è necessario Class se Pathname è omesso.
  2. Class - Variant (String): stringa che rappresenta la definizione formale (Application e ObjectType) dell'oggetto. La classe è richiesta se Pathname è omesso.

CreateObject ha un parametro obbligatorio e un parametro facoltativo:

  1. Class - Variant (String): stringa che rappresenta la definizione formale (Application e ObjectType) dell'oggetto. La classe è un parametro richiesto.
  2. Servername - Variant (String): il nome del computer remoto su cui verrà creato l'oggetto. Se omesso, l'oggetto verrà creato sul computer locale.

La classe è sempre composta da due parti sotto forma di Application.ObjectType :

  1. Applicazione : il nome dell'applicazione a cui appartiene l'oggetto. |
  2. Tipo di oggetto : il tipo di oggetto che si sta creando. |

Alcune classi di esempio sono:

  1. Word.Application
  2. Foglio Excel
  3. Scripting.FileSystemObject

Dimostrazione di GetObject e CreateObject

Funzione MSDN-GetObject

Restituisce un riferimento a un oggetto fornito da un componente ActiveX.

Utilizzare la funzione GetObject quando è presente un'istanza corrente dell'oggetto o se si desidera creare l'oggetto con un file già caricato. Se non esiste un'istanza corrente e non si desidera che l'oggetto venga avviato con un file caricato, utilizzare la funzione 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
Autorizzato sotto CC BY-SA 3.0
Non affiliato con Stack Overflow