Quando si desidera utilizzare le funzionalità di altre applicazioni, è necessario decidere se si desidera utilizzare l’associazione anticipata o tardiva delle variabili oggetto.

Rilegatura anticipata

L’associazione tra la variabile oggetto e l’oggetto avviene quando l’applicazione viene compilata.

Ciò si traduce in prestazioni migliori rispetto a quando viene eseguita l’associazione quando viene eseguita l’applicazione (associazione tardiva).

Se vuoi creare un’associazione anticipata devi impostare un riferimento alla libreria di oggetti “estranei” che vuoi usare.

Questo viene fatto dal VBE usando il menu Strumenti, Riferimenti …​. Quando un VBProject ha un riferimento a una libreria di oggetti, puoi dichiarare variabili oggetto specifiche (ad esempio Dim oDoc As Word.Document). Questo renderà anche più semplice programmare gli “oggetti estranei” poiché VBE mostrerà lo stesso aiuto di programmazione riguardo proprietà, metodi ed eventi che mostra per gli oggetti appartenenti all’applicazione da cui stai lavorando (il VBE ha aggiunto automaticamente riferimento a questa domanda in anticipo).

Questo è un esempio di codice generale che mostra l’errore di automazione di vba:

Sub OLEAutomationEarlyBinding()

' replace xxx with one of the following:

' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As xxx.Application ' early binding

Dim oDoc As xxx.Document

' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation, Word.Document

On Error Resume Next ' ignore errors

Set oApp = GetObject(, "xxx.Application")

' reference an existing application instance

If oApp Is Nothing Then ' no existing application is running

Set oApp = New xxx.Application ' create a new application instance

End If

On Error GoTo 0 ' resume normal error handling

If oApp Is Nothing Then ' not able to create the application

MsgBox "The application is not available!", vbExclamation

End If

With oApp

.Visible = True ' make the application object visible

' at this point the application is visible

' do something depending on the application...

Set oDoc = .Documents.Open("c:\foldername\filename.doc")

' open a document

'        ...

oDoc.Close True ' close and save the document

.Quit ' close the application

End With

Set oDoc = Nothing ' free memory

Set oApp = Nothing ' free memory

End Sub

Rilegatura tardiva

Il collegamento tra la variabile oggetto e l’oggetto avviene durante l’esecuzione dell’applicazione.

Ciò si traduce in prestazioni più lente rispetto a quando l’associazione avviene quando l’applicazione viene compilata (associazione anticipata).

Se non aggiungi un riferimento alla libreria oggetti appartenente all’applicazione “estranea” devi dichiarare variabili oggetto generali (es. Dim oDoc As Object). Ciò renderà più difficile programmare gli “oggetti estranei” poiché VBE non visualizzerà lo stesso aiuto di programmazione per quanto riguarda proprietà, metodi ed eventi che mostra per gli oggetti appartenenti all’applicazione da cui si sta lavorando.

Questo è un esempio di codice generale:

Sub OLEAutomationLateBinding()

' replace xxx with one of the following:

' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As Object ' late binding

Dim oDoc As Object ' late binding

On Error Resume Next ' ignore errors

Set oApp = GetObject(, "xxx.Application")

' reference an existing application instance

If oApp Is Nothing Then ' no existing application is running

Set oApp = CreateObject("xxx.Application")

' create a new application instance

End If

On Error GoTo 0 ' resume normal error handling

If oApp Is Nothing Then ' not able to create the application

MsgBox "The application is not available!", vbExclamation

End If

With oApp

.Visible = True ' make the application object visible

' at this point the application is visible

' do something depending on the application...

Set oDoc = .Documents.Open("c:\foldername\filename.doc")

' open a document

'        ...

oDoc.Close True ' close and save the document

.Quit ' close the application

End With

Set oDoc = Nothing ' free memory

Set oApp = Nothing ' free memory

End Sub