informazioni di base di automazione OLE utilizzando VBA in Microsoft Excel
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