Verweise: Late und Early Binding

Im vierten Teil der Beitragsreihe rund um das Thema Verweise geht es um Late und Early Binding. Das Ziel dieses Beitrags ist es, die Vor- und Nachteile beider Verfahren herauszuarbeiten. Danach erfahren Sie, wie Sie das Beste aus beiden Techniken herausholen und wie Sie den Wechsel von einem zum anderen Vorgehen so bequem wie möglich gestalten.

Wenn das Objektmodell von Access einmal nicht ausreicht, um eine Aufgabe zu erfüllen, haben Sie dank VBA die Möglichkeit, auf das Objektmodell anderer Anwendungen zuzugreifen. Dort können Sie sich die benötigten Funktionen quasi „ausleihen“. Um die Objekte und Methoden einer fremden Anwendung für Access verfügbar zu machen, haben Sie grundsätzlich zwei Möglichkeiten, nämlich Early Binding und Late Binding.

Anhand eines kleinen Beispiels lernen Sie diese beiden Techniken kennen. Dabei soll einfach nur ein Word-Dokument geöffnet und angezeigt werden. Dieses Beispiel ist absichtlich kurz gehalten. Es soll Ihnen lediglich die wesentlichen Kernelemente der beiden Techniken näherbringen.

Early Binding

Beim Early Binding setzen Sie einen Verweis auf die verwendete Bibliothek. Im konkreten Fall ist ein Verweis auf Microsoft Word erforderlich:

Dim objWord As Word.Application
Set objWord = New Word.Application
With objWord
.Visible = True
.Activate
.WindowState = wdWindowStateMaximize
.Documents.Open (CurrentProject.Path & _
"\Test.doc")
End With

Diese Anweisungen deklarieren und instanzieren als Erstes eine Variable vom Typ Word.Application und machen danach Word sichtbar. Das Fenster von Word wird aktiviert und maximiert. Am Ende wird ein Word-Dokument geladen. Dadurch, dass Sie Early Binding verwenden, haben Sie folgende Vorteile:

  • Sie erhalten IntelliSense-Unterstützung beim Programmieren.
  • Beim Kompilieren wird eine Syntax-Prüfung vorgenommen.
  • Sie können eingebaute Konstanten verwenden.

Insgesamt ist ein Performancevorteil zu erwarten, da für Access beziehungsweise VBA die zu verwendende Bibliothek bereits beim Kompilieren bekannt ist.

Wenn Early Binding so viele Vorteile hat, warum dann dieser Artikel Early Binding hat leider einen entscheidenden Nachteil: Sie benötigen einen Verweis. Dass bei der Verwendung von Verweisen so einiges schiefgehen kann, hat der letzte Beitrag dieser Reihe gezeigt (Defekte Verweise: Ursachen und Lösungen, Shortlink 572).

Late Binding

Ein zusätzlicher Verweis ist beim Late Binding nicht erforderlich:

Dim objWord As Object
Set objWord = CreateObject ("Word.Application")
With objWord
.Visible = True
.Activate
.WindowState = 1
.Documents.Open (CurrentProject.Path & _
"\Test.doc")
End With

Beim Late Binding wird eine Variable vom Typ Object deklariert. Dieser Variablen weisen Sie dann mit der Methode CreateObject plus der sogenannten ProgID Word.Application eine neue Instanz von Microsoft Word zu.

Der weitere Code ist fast identisch mit dem vorherigen Beispiel. Ein Unterschied besteht lediglich in der Zuweisung des Wertes für die Eigenschaft WindowState. Statt der in Word eingebauten Konstanten wdWindowStateMaximize wird hier deren Wert 1 verwendet. Die Vorteile, die Sie bei Early Binding haben, entsprechen den Nachteilen von Late Binding:

  • Sie erhalten keine IntelliSense-Unterstützung beim Programmieren.
  • Beim Kompilieren kann keine Syntax-Prüfung vorgenommen werden.
  • Sie können keine eingebauten Konstanten verwenden. Diese müssen Sie durch deren Werte ersetzen.

Insgesamt ist ein Performance-Nachteil zu erwarten, da für Access beziehungsweise VBA die zu verwendende Bibliothek erst zur Laufzeit ermittelt und durchsucht werden muss. Late Binding hat aber einen entscheidenden Vorteil: Sie benötigen keinen Verweis. Wenn Ihre Anwendung auf einem anderen Rechner ausgeführt wird, auf dem eine abweichende (ältere) Version von Microsoft Word installiert ist, wird dieser Code auch dort funktionieren.

Probleme mit Verweisen

Welche Probleme es mit fehlerhaften Verweisen geben kann, hat Ihnen der oben bereits erwähnte Beitrag dieser Reihe gezeigt. Lassen Sie uns kurz untersuchen, wann und wie es zu fehlerhaften Verweisen im Rahmen von Automation kommen kann. Gehen Sie davon aus, dass Sie eine Anwendung erstellt haben, in der Sie einen Verweis auf Microsoft Word gesetzt haben, um per Early Binding zum Beispiel die oben gezeigte Funktionalität zu realisieren. Solange die Anwendung auf Ihrem Rechner verbleibt, gibt es keine Probleme. Interessant wird es erst, wenn Sie diese weitergeben. Wenn Ihre Anwendung auf einem Rechner ausgeführt wird, auf dem die gleiche Version von MS Word installiert ist, sind keine Probleme zu erwarten.

Wird Ihre Anwendung auf einem Rechner mit einer neueren Version vom MS Word ausgeführt, dann erkennt Access dies und passt den Verweis selbstständig an. Auch bei dieser automatischen Anpassung eines Verweises kann es zu Fehlern kommen. Denken Sie nur an eine .mde-Datei. Dort können keine Verweise angepasst werden.

Noch schlimmer wird es, wenn Ihre Anwendung auf einem Rechner ausgeführt wird, auf dem eine ältere Version von MS Word installiert ist – oder auch gar keine. Der Verweis kann in diesem Fall nicht angepasst werden. Die neue Version war bei der Erstellung der älteren Version noch nicht bekannt.

Sie können die zu erwartenden Probleme mit den Verweisen selbst nachvollziehen. Verwenden Sie dazu die Beispieldatenbanken mit dem Namen Demo.LateEarlyBinding.2000.mdb. Diese Datenbank wurde mit Access 2000 erstellt und enthält einen Verweis auf die Microsoft Word 9.0 Object Library. Öffnen Sie diese Datenbank auf einem Rechner, auf dem Office XP oder höher installiert ist, und schauen Sie sich an, was passiert. Ein Blick in die Verweise zeigt, dass Access den Verweis zu Microsoft Word selbstständig angepasst hat. Verwenden Sie auch die Datenbank mit dem Namen Demo.LateEarlyBinding.2007.mdb. Diese Datenbank wurde mit Access 2007 erstellt und enthält einen Verweis auf die Bibliothek Microsoft Word 12.0.

Wenn Sie diese Datenbank auf einem Rechner mit Office 2003 oder niedriger öffnen, erhalten Sie bei der Ausführung eine Fehlermeldung. Ein Blick in die Verweise zeigt, dass der Verweis auf die Word Bibliothek die Ursache ist (siehe Bild 1).

missing image file

Bild 1: Dieser Verweis kann nicht angepasst werden.

Strategien

An dieser Stelle ist es Zeit für ein kleines Zwischenfazit: Early Binding macht das Programmieren bequem. IntelliSense-Unterstützung und automatische Syntax-Überprüfung helfen Ihnen, schnell den richtigen Code zu erstellen. Im Gegenzug bereitet der notwendige Verweis aber immer wieder Probleme, wenn Sie Ihre Anwendung weitergeben. Late Binding bietet Ihnen keinerlei Unterstützung während des Programmierens. Dafür benötigen Sie keinen zusätzlichen Verweis auf die verwendete Bibliothek und sind somit unabhängig von der jeweils installierten Version. Sie können sich die Vorteile der beiden Techniken zunutze machen:

  • Programmieren Sie mit Early Binding. Profitieren Sie dabei von der Unterstützung, die Ihnen die VB-IDE bietet.
  • Vor der Auslieferung Ihrer Anwendung wandeln Sie Ihren Code nach Late Binding um. So können Sie auf einen Verweis und die damit verbundenen Probleme verzichten.

Von Early zu Late Binding

Um den Wechsel von Early zu Late Binding zu vollziehen, sind folgende Schritte notwendig:

  • Verweis entfernen
  • Deklaration der Objekt-Variablen anpassen
  • Instanziierung der Objekte anpassen
  • Eingebaute Konstanten ersetzen

Den Verweis entfernen Sie im Verweise-Dialog. Wie Sie die Deklaration der Objekt-Variablen anpassen und die Objekte instanzieren, haben Sie in den Code-Beispielen bereits kennengelernt.

Jetzt fehlt nur noch das Ersetzen der eingebauten Konstanten. Um den jeweiligen Wert für eine eingebaute Konstante zu ermitteln, haben Sie zwei Möglichkeiten. Sie können sich den Wert im Direktfenster ausdrucken lassen (siehe Bild 2) oder die Werte der verwendeten Konstanten im Objekt-Katalog nachschlagen. Öffnen Sie dazu den Objekt-Katalog (F2), wählen Sie die verwendete Bibliothek aus und geben Sie die gewünschte Konstante in die Suche ein (siehe Bild 3).

missing image file

Bild 2: Den Wert einer Konstanten im Direktfenster ermitteln…

Ende des frei verfügbaren Teil. Wenn Du mehr lesen möchtest, hole Dir ...

den kompletten Artikel im PDF-Format mit Beispieldatenbank

diesen und alle anderen Artikel mit dem Jahresabo

Schreibe einen Kommentar