Visual Basic - Technik, FAQ, Tricks, Beispiele

Home / Objekte / Office / OLE

OLE und ActiveX-Automation

Eine der größten Vorzüge von VB und VBA (VB für Applikationen) ist die einfache (Fern-)Steuerung von anderen (Microsoft-)Anwendungen, wie z.B. Word. Gerade VB-Einsteigern kann man mit folgender Demonstration nicht nur einen Einblick in "OLE" geben, sondern eventuell auch die Motivation für "warum muss ich ausgerechnet VB lernen?" geben.

Doch nun zum Beispiel: Zuerst muss ein neues Projekt angelegt werden. Unter Projekt/Verweise (Project/References) muss das Häckchen vor der "Microsoft Word Object Library" gesetzt werden, damit diese in das Projekt eingebunden wird.

Nun wird eine passende Variable deklariert:

Private App As Word.Application

Wenn man den Punkt drückt, erscheint (normalerweise) automatisch die Liste aller Word-Objekte. (Jetzt beginnen bereits die Augen der ersten Schüler zu leuchten... smile!)

Dann wird in der Ereignis-Prozedur Form_Click folgendes eingegeben:

Set App = CreateObject("Word.Application")
App.Visible = True
App.Documents.Add
App.ActiveDocument.Content.InsertAfter _
    "Hier ist ein neuer Text." & vbNewLine & _
    "Datum/Uhrzeit: " & Now

(Man achte wieder auf die Augen der Schulungsteilnehmer... smile!)

Nun wird das Programm gestartet und bei einem Klick auf das leere Formular erscheint Microsoft Word mit einem neu angelegten Dokument! Bei nochmaligem Klick erscheint ein zweites Word, usw.

Möchte man jetzt noch den ständigen Neustart von Word verhindern, so kann noch folgende (sehr hilfreiche!) Routine präsentiert werden (am Besten in ein Modul namens "Utilities" oder "Shared"):

Function GetApplication( _
    ByVal AppClass As String _
  ) As Object
  Const vbErr_AppNotRun = 429
  
  On Error Resume Next
    Set GetApplication = GetObject(Class:=AppClass)
    If Err.Number = vbErr_AppNotRun _
    Then Set GetApplication = CreateObject(AppClass)
  On Error GoTo 0
End Function

Erläuterung: Zuerst wird versucht, mit GetObject auf eine bereits gestartete Anwendung zuzugreifen. Im Fehlerfall wird mir CreateObject eine neue Instanz erzeugt.

Mit dieser Routine kann nun die erste Zeile in Form_Click verbessert werden:

Set App = GetApplication("Word.Application")

Jetzt wird Word maximal einmal gestartet, und alle neu angelegten Dokumente erscheinen in dieser einen Instanz.

© Jost Schwider, 30.04.2000-30.04.2000 - http://vb-tec.de/ole.htm