Podstawowe informacje o automatyzacji OLE przy użyciu VBA w Microsoft Excel

Anonim

Jeśli chcesz korzystać z funkcjonalności z innych aplikacji, musisz zdecydować, czy chcesz z nich korzystać
wczesne lub późne wiązanie zmiennych obiektu.

Wczesne wiązanie

Powiązanie między zmienną obiektu a obiektem ma miejsce podczas kompilowania aplikacji.
Powoduje to lepszą wydajność w porównaniu do sytuacji, gdy powiązanie ma miejsce podczas uruchamiania aplikacji (późne wiązanie).
Jeśli chcesz stworzyć wczesne wiązanie, musisz ustawić referencję do "obcej" biblioteki obiektów, której chcesz użyć.
Odbywa się to z VBE za pomocą menu Narzędzia, Referencje… . Kiedy VBProject ma odniesienie do an
bibliotekę obiektów można zadeklarować określone zmienne obiektowe (np. Dim oDoc As Word.Document). To też sprawi, że
łatwiej zaprogramować "obce-obiekty", ponieważ VBE wyświetli tę samą pomoc programistyczną dotyczącą właściwości,
metody i zdarzenia, które wyświetla dla obiektów należących do aplikacji, nad którą pracujesz
z (VBE automatycznie dodało wcześniej odniesienie do tej aplikacji).
To jest ogólny przykład kodu pokazujący błąd automatyzacji vba:

Sub OLEAutomationEarlyBinding() ' zastąp xxx jednym z następujących: ' Access, Excel, Outlook, PowerPoint lub Word Dim oApp As xxx.Application ' wczesne wiązanie Dim oDoc As xxx.Document ' Excel.Workbook, Outlook.MailItem, PowerPoint.Presentation , Word.Document Po wznowieniu błędu Dalej ' ignoruj ​​błędy Set oApp = GetObject(, "xxx.Application") ' odwołuje się do istniejącej instancji aplikacji Jeśli oApp jest niczym Następnie ' żadna istniejąca aplikacja nie jest uruchomiona Set oApp = New xxx.Application ' utwórz nowa instancja aplikacji End If On Error GoTo 0 ' wznowienie normalnej obsługi błędów If oApp Is Nothing Then ' nie można utworzyć aplikacji MsgBox "Aplikacja nie jest dostępna!", vbExclamation End If With oApp .Visible = True ' utwórz obiekt aplikacji widoczne ' w tym momencie aplikacja jest widoczna ' zrób coś w zależności od aplikacji… Set oDoc = .Documents.Open("c:\nazwa_folderu\nazwapliku.doc") ' otwórz dokument '… oDoc.Close True ' zamknij i zapisz dokument .Zamknij 'zamknij aplikację End With Set oDoc = Nic ' wolna pamięć Set oApp = Nic ' wolna pamięć End Sub

Późne wiązanie

Powiązanie między zmienną obiektu a obiektem ma miejsce podczas uruchamiania aplikacji.
Powoduje to wolniejszą wydajność w porównaniu do sytuacji, gdy powiązanie ma miejsce podczas kompilowania aplikacji (wczesne wiązanie).
Jeśli nie dodasz referencji do biblioteki obiektów należących do „obcej” aplikacji, musisz:
zadeklarować ogólne zmienne obiektu (np. Dim oDoc As Object). Utrudni to programowanie
"obce-obiekty", ponieważ VBE nie wyświetli tej samej pomocy programistycznej dotyczącej właściwości,
metody i zdarzenia, które wyświetla dla obiektów należących do aplikacji, z której pracujesz.
Oto ogólny przykład kodu:

Sub OLEAutomationLateBinding() ' zastąp xxx jednym z następujących: ' Access, Excel, Outlook, PowerPoint lub Word Dim oApp As Object ' późne wiązanie Dim oDoc As Object ' późne wiązanie On Error Resume Next ' ignorowanie błędów Set oApp = GetObject(, "xxx.Application") ' odwołuje się do istniejącej instancji aplikacji If oApp to Nothing Then ' żadna istniejąca aplikacja nie jest uruchomiona Set oApp = CreateObject("xxx.Application") ' tworzenie nowej instancji aplikacji End If On Error GoTo 0 ' wznowienie normalnego błędu obsługa If oApp Is Nothing Then ' nie można utworzyć aplikacji MsgBox "Aplikacja nie jest dostępna!", vbExclamation End If With oApp .Visible = True ' spraw, aby obiekt aplikacji był widoczny ' w tym momencie aplikacja jest widoczna ' zrób coś w zależności w aplikacji… Set oDoc = .Documents.Open("c:\nazwafolderu\nazwapliku.doc") ' otwórz dokument '… oDoc.Close True ' zamknij i zapisz dokument .Quit ' zamknij aplikację End With Set oDoc = Nic ' wolna pamięć Ustaw oApp = Nic ' fr ee pamięć Koniec Sub