Grundlæggende oplysninger om OLE -automatisering ved hjælp af VBA i Microsoft Excel

Anonim

Når du vil bruge funktionalitet fra andre applikationer, skal du beslutte, om du vil bruge det
tidlig eller sen binding af objektvariabler.

Tidlig binding

Bindingen mellem objektvariablen og objektet finder sted, når applikationen kompileres.
Dette resulterer i bedre ydeevne i forhold til, når bindingen finder sted, når applikationen køres (sen binding).
Hvis du vil oprette en tidlig binding, skal du angive en reference til det "fremmede" objektbibliotek, du vil bruge.
Dette gøres fra VBE ved hjælp af menuen Værktøjer, referencer…. Når et VBProject har en reference til en
objektbibliotek kan du erklære specifikke objektvariabler (f.eks. Dim oDoc som Word.Document). Dette vil også klare det
lettere at programmere "fremmedlegemer", da VBE viser den samme programmeringshjælp vedrørende egenskaber,
metoder og begivenheder, den viser for objekterne, der tilhører det program, du arbejder
fra (VBE har automatisk tilføjet referencen til denne applikation på forhånd).
Dette er et generelt kodeeksempel, der viser vba -automatiseringsfejl:

Sub OLEAutomationEarlyBinding () 'erstat xxx med et af følgende:' Access, Excel, Outlook, PowerPoint eller Word Dim oApp As xxx.Application 'early binding Dim oDoc As xxx.Document' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation , Word.Document Ved fejl Genoptag Næste 'ignorer fejl Indstil oApp = GetObject (, "xxx.Application")' henviser til en eksisterende applikationsinstans Hvis oApp er ingenting Så 'ingen eksisterende applikation kører Set oApp = Ny xxx.Application' opret en ny applikationsforekomst Afslut hvis ved fejl Gå til 0 'genoptag normal fejlhåndtering Hvis oApp ikke er noget' kan ikke 'oprette applikationen MsgBox "Applikationen er ikke tilgængelig!", vbExclamation End If With oApp .Visible = True' gør applikationen til objekt synlig 'på dette tidspunkt er applikationen synlig' gør noget afhængigt af applikationen … Indstil oDoc = .Documents.Open ("c: \ mappenavn \ filnavn.doc") 'åbn et dokument' … oDoc.Close True 'luk og gem dokumentet. Afslut 'luk applikationen Afslut med sæt oDoc = Intet 'ledig hukommelse Indstil oApp = ingenting' ledig hukommelse Afslut Sub

Sen binding

Bindingen mellem objektvariablen og objektet finder sted, når applikationen køres.
Dette resulterer i langsommere ydeevne i forhold til når bindingen finder sted, når ansøgningen kompileres (tidlig binding).
Hvis du ikke tilføjer en reference til objektbiblioteket, der tilhører den "fremmede" applikation, skal du
erklære generelle objektvariabler (f.eks. Dim oDoc som objekt). Dette vil gøre det vanskeligere at programmere
"fremmedlegemer", da VBE ikke viser den samme programmeringshjælp vedrørende egenskaber,
metoder og hændelser, den viser for objekterne, der tilhører det program, du arbejder fra.
Dette er et generelt kodeeksempel:

Sub OLEAutomationLateBinding () 'erstat xxx med et af følgende:' Access, Excel, Outlook, PowerPoint eller Word Dim oApp As Object 'sen binding Dim oDoc As Object' sen binding On Error Resume Next 'ignorer fejl Indstil oApp = GetObject (, "xxx.Application") 'refererer til en eksisterende applikationsforekomst Hvis oApp er ingenting Så' ingen eksisterende applikation kører Angiv oApp = CreateObject ("xxx.Application") 'opret en ny applikationsforekomst End If On Error GoTo 0' genoptag normal fejl håndtering Hvis oApp er ingenting Så 'ikke i stand til at oprette applikationen MsgBox "Applikationen er ikke tilgængelig!", vbExclamation End If With oApp .Visible = True' gør applikationsobjektet synligt 'på dette tidspunkt er applikationen synlig' gør noget afhængigt på applikationen … Indstil oDoc = .Documents.Open ("c: \ mappenavn \ filename.doc") 'åbn et dokument' … oDoc.Close True 'luk og gem dokumentet. Afslut' luk programmet Slut med sæt oDoc = Intet 'ledig hukommelse Indstil oApp = Intet' fr ee hukommelse Afslut Sub