Basisinformatie over OLE-automatisering met VBA in Microsoft Excel

Anonim

Wanneer u functionaliteit van andere applicaties wilt gebruiken, moet u beslissen of u gebruik wilt maken van
vroege of late binding van objectvariabelen.

vroege binding

De binding tussen de objectvariabele en het object vindt plaats wanneer de toepassing wordt gecompileerd.
Dit resulteert in betere prestaties in vergelijking met wanneer de binding plaatsvindt wanneer de applicatie wordt uitgevoerd (late binding).
Als u een vroege binding wilt maken, moet u een verwijzing instellen naar de "buitenlandse" objectbibliotheek die u wilt gebruiken.
Dit doe je vanuit de VBE via het menu Tools, References… . Wanneer een VBProject een verwijzing heeft naar een
objectbibliotheek kunt u specifieke objectvariabelen declareren (bijv. Dim oDoc As Word.Document). Dit gaat het ook lukken
gemakkelijker om de "vreemde objecten" te programmeren, omdat de VBE dezelfde programmeerhulp met betrekking tot eigenschappen zal weergeven,
methoden en gebeurtenissen die het weergeeft voor de objecten die horen bij de toepassing waarmee u werkt
van (de VBE heeft vooraf automatisch de verwijzing naar deze aanvraag toegevoegd).
Dit is een algemeen codevoorbeeld met een vba-automatiseringsfout:

Sub OLEAutomationEarlyBinding() ' vervang xxx door een van de volgende: ' Access, Excel, Outlook, PowerPoint of 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 ' negeer fouten Set oApp = GetObject(, "xxx.Application") ' verwijs naar een bestaande applicatie-instantie Als oApp niets is Dan is er geen bestaande applicatie actief Set oApp = New xxx.Application ' maak een nieuwe toepassingsinstantie End If On Error GoTo 0 ' hervat normale foutafhandeling If oApp Is Nothing Then ' kan de toepassing niet maken MsgBox "De toepassing is niet beschikbaar!", vbExclamation End If With oApp .Visible = True ' maak het toepassingsobject zichtbaar ' op dit punt is de toepassing zichtbaar ' doe iets afhankelijk van de toepassing… Stel oDoc = .Documents.Open("c:\mapnaam\bestandsnaam.doc") ' open een document '… oDoc.Close True ' sluiten en opslaan het document .Sluit de applicatie af End With Set oDoc = Niets ' vrij geheugen Set oApp = Niets ' vrij geheugen End Sub

Late binding

De binding tussen de objectvariabele en het object vindt plaats wanneer de toepassing wordt uitgevoerd.
Dit resulteert in tragere prestaties in vergelijking met wanneer de binding plaatsvindt wanneer de applicatie wordt gecompileerd (early binding).
Als u geen verwijzing toevoegt naar de objectbibliotheek die bij de "buitenlandse" applicatie hoort, moet u:
declareer algemene objectvariabelen (bijv. Dim oDoc As Object). Dit maakt het moeilijker om te programmeren
de "vreemde objecten" omdat de VBE niet dezelfde programmeerhulp zal weergeven met betrekking tot eigenschappen,
methoden en gebeurtenissen die het weergeeft voor de objecten die horen bij de toepassing waarmee u werkt.
Dit is een algemeen codevoorbeeld:

Sub OLEAutomationLateBinding() ' vervang xxx door een van de volgende: ' Access, Excel, Outlook, PowerPoint of Word Dim oApp As Object ' late binding Dim oDoc As Object ' late binding On Error Resume Next ' negeer fouten Set oApp = GetObject(, "xxx.Application") ' verwijst naar een bestaande toepassingsinstantie If oApp Is Nothing Then ' er wordt geen bestaande toepassing uitgevoerd Stel oApp = CreateObject ("xxx.Application") ' maak een nieuwe toepassingsinstantie End If On Error GoTo 0 ' hervat normale fout afhandeling If oApp Is Nothing Dan ' kan de applicatie niet maken MsgBox "De applicatie is niet beschikbaar!", vbExclamation End If With oApp .Visible = True ' maak het applicatie-object zichtbaar ' op dit punt is de applicatie zichtbaar ' doe iets afhankelijk op de applicatie… Set oDoc = .Documents.Open("c:\foldername\filename.doc") ' open a document '… oDoc.Close True ' sluit en sla het document op .Quit ' sluit de applicatie End With Set oDoc = Niets ' vrij geheugen Stel oApp = Niets ' fr ee geheugen Einde Sub