ERLANDSEN DATA CONSULTING Excel & VBA Tips   Information in English / Informasjon på engelsk

Disse websidene oppdateres ikke lengre og er kun tilgjengelig for historikken sin skyld.

Klikk her for å gå til den oppdaterte informasjonen.

Grunnleggende info om OLE automasjon

Når man ønsker å benytte funksjonalitet fra et annet program må man ta stilling til om man skal benytte tidlig eller sen binding når man oppretter objekter fra det andre programmet.

Tidlig binding
Dette oppnås ved at man i VBProsjektet legger til en referanse til objektbiblioteket til det "fremmede" programmet man vil benytte seg av. Man legger til referanser til andre objektbiblioteker ved å velge menyvalget Tools, References... i VBE. Bindingen mellom objektvariabelen og objektet skjer når programmet kompileres. Dette gir en bedre ytelse enn om bindingen skjer når programmet utføres (sen binding). Når et VBProsjekt har en referanse til et annet objektbibliotek kan man deklarere spesifikke objektvariabler fra dette objektbiblioteket (f.eks. Dim oDoc As Word.Document). Dermed oppnår man at det er enklere å programmere "fremmed-objektene" siden VBE vil vise den samme programmeringshjelpen m.h.t. egenskaper, metoder og hendelser som du får med objektene til det programmet du jobber fra (VBE har lagt til referansen til dette programmet på forhånd).

Her er et generelt kodeeksempel:

Sub OLEAutomationTidligBinding()
' bytt ut xxx med et av disse ordene:
' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As xxx.Application ' tidlig binding
Dim oDoc As xxx.Document 
' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation, Word.Document
    On Error Resume Next ' ignorer feil
    Set oApp = GetObject(, "xxx.Application") 
    ' referer til et eksisterende programobjekt
    If oApp Is Nothing Then ' ingen eksisterende programobjekter er startet
        Set oApp = New xxx.Application ' opprett et nytt programobjekt
    End If
    On Error GoTo 0 ' stopp ved feil
    If oApp Is Nothing Then ' kan ikke opprette programobjektet
        MsgBox "Programmet er ikke tilgjengelig!", vbExclamation
    End If
    With oApp
        .Visible = True ' gjør programobjektet synlig
        ' gjør noe...
        Set oDoc = .Documents.Open("c:\foldername\filename.doc") 
        ' åpne et dokument
'        ...
        oDoc.Close True ' lagre og lukk dokumentet
        .Quit ' lukk programmet
    End With
    Set oDoc = Nothing ' frigjør minne
    Set oApp = Nothing ' frigjør minne
End Sub

Sen binding
Bindingen mellom objektvariabelen og objektet skjer når programmet utføres. Dette gir en dårligere ytelse enn om bindingen skjer når programmet kompileres (tidlig binding). Dersom man ikke legger til en referanse til objektbiblioteket til det "fremmede" programmet man vil benytte seg av må man deklarere generelle objektvariabler (f.eks. Dim oDoc As Object). Disse generelle objektvariablene er litt vanskeligere å programmere siden VBE ikke vil vise den samme programmeringshjelpen m.h.t. egenskaper, metoder og hendelser som du får med objektene til det programmet du jobber fra.

Her er et generelt kodeeksempel:

Sub OLEAutomationSenBinding()
' bytt ut xxx med et av disse ordene:
' Access, Excel, Outlook, PowerPoint or Word

Dim oApp As Object ' sen binding
Dim oDoc As Object ' sen binding
    On Error Resume Next ' ignorer feil
    Set oApp = GetObject(, "xxx.Application") 
    ' referer til et eksisterende programobjekt
    If oApp Is Nothing Then ' ingen eksisterende programobjekter er startet
        Set oApp = CreateObject("xxx.Application") 
        ' opprett et nytt programobjekt
    End If
    On Error GoTo 0 ' stopp ved feil
    If oApp Is Nothing Then ' kan ikke opprette programobjektet
        MsgBox "Programmet er ikke tilgjengelig!", vbExclamation
    End If
    With oApp
        .Visible = True ' gjør programobjektet synlig
        ' gjør noe...
        Set oDoc = .Documents.Open("c:\foldername\filename.doc") 
        ' åpne et dokument
'        ...
        oDoc.Close True ' lagre og lukk dokumentet
        .Quit ' lukk programmet
    End With
    Set oDoc = Nothing ' frigjør minne
    Set oApp = Nothing ' frigjør minne
End Sub

 

 

Dokumentet er sist oppdatert 2000-11-07 12:35:01      Utskriftsvennlig versjon

 

Erlandsen Data Consulting     http://www.erlandsendata.no/   
Excel & VBA Tips   Copyright ©1999-2017    Ole P. Erlandsen   All rights reserved
E-post kontaktadresse