Quando si desidera utilizzare funzionalità di altre applicazioni, è necessario decidere se si desidera utilizzare
associazione anticipata o tardiva delle variabili oggetto.
Rilegatura anticipata
L'associazione tra la variabile oggetto e l'oggetto avviene al momento della compilazione dell'applicazione.
Ciò si traduce in prestazioni migliori rispetto a quando l'associazione avviene durante l'esecuzione dell'applicazione (associazione tardiva).
Se vuoi creare un'associazione anticipata devi impostare un riferimento alla libreria di oggetti "estranea" che desideri utilizzare.
Questo viene fatto dal VBE utilizzando il menu Strumenti, Riferimenti… . Quando un VBProject ha un riferimento a an
libreria di oggetti è possibile dichiarare variabili oggetto specifiche (ad es. Dim oDoc As Word.Document). Anche questo lo farà
più facile programmare gli "oggetti estranei" poiché il VBE visualizzerà lo stesso aiuto di programmazione per quanto riguarda le proprietà,
metodi ed eventi che visualizza per gli oggetti appartenenti all'applicazione su cui stai lavorando
da (il VBE ha aggiunto automaticamente il riferimento a questa domanda in anticipo).
Questo è un esempio di codice generale che mostra l'errore di automazione vba:
Sub OLEAutomationEarlyBinding() ' sostituire xxx con uno dei seguenti: ' Access, Excel, Outlook, PowerPoint o 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 ' ignora gli errori Set oApp = GetObject(, "xxx.Application") ' fa riferimento a un'istanza dell'applicazione esistente If oApp Is Nothing Then ' nessuna applicazione esistente è in esecuzione Set oApp = New xxx.Application ' create a nuova istanza dell'applicazione End If On Error GoTo 0 ' riprende la normale gestione degli errori If oApp Is Nothing Then ' non riesce a creare l'applicazione MsgBox "L'applicazione non è disponibile!", vbExclamation End If With oApp .Visible = True ' rende l'oggetto dell'applicazione visibile ' a questo punto l'applicazione è visibile ' fai qualcosa a seconda dell'applicazione… Set oDoc = .Documents.Open("c:\nomecartella\nomefile.doc") 'apri un documento '… oDoc.Close True ' chiudi e salva il documento .Esci 'chiudi l'applicazione End With Set oDoc = Nothing ' memoria libera Set oApp = Nothing ' memoria libera End Sub
Rilegatura tardiva
L'associazione 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 di oggetti appartenente all'applicazione "straniera" devi
dichiarare variabili oggetto generali (ad es. Dim oDoc As Object). Ciò renderà più difficile la programmazione
gli "oggetti estranei" poiché il VBE non visualizzerà lo stesso aiuto di programmazione per quanto riguarda le proprietà,
metodi ed eventi che visualizza per gli oggetti appartenenti all'applicazione da cui si sta lavorando.
Questo è un esempio di codice generale:
Sub OLEAutomationLateBinding() ' sostituire xxx con uno dei seguenti: ' Access, Excel, Outlook, PowerPoint o Word Dim oApp As Object ' associazione tardiva Dim oDoc As Object ' associazione tardiva In caso di errore Riprendi successivo ' ignora gli errori Set oApp = GetObject(, "xxx.Application") ' fa riferimento a un'istanza dell'applicazione esistente If oApp Is Nothing Then ' nessuna applicazione esistente è in esecuzione Set oApp = CreateObject("xxx.Application") ' crea una nuova istanza dell'applicazione End If On Error GoTo 0 ' riprende il normale errore gestione If oApp Is Nothing Then ' impossibile creare l'applicazione MsgBox "L'applicazione non è disponibile!", vbExclamation End If With oApp .Visible = True ' rendi visibile l'oggetto applicazione ' a questo punto l'applicazione è visibile ' fai qualcosa a seconda sull'applicazione… Set oDoc = .Documents.Open("c:\foldername\filename.doc") ' apre un documento '… oDoc.Close True ' chiude e salva il documento .Quit ' chiude l'applicazione End With Set oDoc = Niente ' memoria libera Imposta oApp = Niente ' fr ee memoria End Sub