Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Late oder Early Binding?

Forumthread: Late oder Early Binding?

Late oder Early Binding?
11.05.2020 16:15:27
Klaus
Hi Leute,
ich habe mich gerade etwas zu weit aus dem Fenster gelehnt und über Sachen schwadroniert von denen ich nicht genug weiss :-) Damit ich gleich nicht ganz dumm dastehe, brauche ich bitte eine kurze Nachhilfe.
Mit dem u.g. Code schicke ich aus Excel ein sql-Kommando an eine Acces-Datenbank. Verfolgt der Beispielcode Late oder Early-Binding?
Kann mir einer extrem kurz und knapp den Unterschied erklären? Beim englischen Wikipediaeintrag _ komme ich nicht hinterher.

Const myAccessDB As String = "C:\Pfadangabe\Datenbank.accdb"
Sub DO_SQL(mySql As String)
Dim cmd As ADODB.Command
Dim con As ADODB.Connection
Set con = New ADODB.Connection
con.Open ConnectionString:= _
"Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source= " & myAccessDB & ";" & _
"Mode=Share Exclusive"
Set cmd = New ADODB.Command
cmd.ActiveConnection = con
cmd.CommandText = mySql
cmd.Execute
Set cmd = Nothing
con.Close
Set con = Nothing
End Sub

Vielen Dank,
Klaus
Anzeige

10
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Late oder Early Binding?
11.05.2020 16:22:45
Martin
Hallo Klaus,
du verwendest Early-Binding, weil ein Verweis im VBA-Projekt auf die Objektbibliothek von Access gesetzt ist. Der Vorteil von Early-Binding besteht darin, dass es schneller ist (...weil nicht erst ein "später Verweis" hergestellt werden muss) und auch die Objekttypen sowie ihre Eigenschaften der Bibliothek im VBA-Editor bekannt sind bzw. vorgeschlagen werden.
Bei Late Binding musst du einen Verweis mit CreateObject erzeugen.
Viele Grüße
Martin
Anzeige
AW: Late oder Early Binding?
11.05.2020 16:47:44
ChrisL
Hi Klaus
Ergänzend zur Antwort von Martin.
Ein wichtiger Vorteil von Late-Binding:
https://wordmvp.com/FAQs/InterDev/EarlyvsLateBinding.htm
The main advantage is that code which uses late binding is more certain to be version-independent
Öfters ist Late-Binding also Versions-unabhängig. Öfters, aber leider nicht immer.
In deinem Fall entsteht die Versionsabhängigkeit im ConnectionString (Provider). Es handelt sich also um eine der wenigen Ausnahmen, welche sowieso nicht auf jeder Version funktionieren wird.
cu
Chris
Anzeige
AW: Late oder Early Binding?
11.05.2020 18:32:11
Martin
Hallo Klaus,
nach dem Beitrag von Chris ist mir aufgefallen, dass ich nicht auf die Vorteile von Late Binding eingegangen bin.
Man kann nicht davon ausgehen, dass auf allen Computern die verwendeten Objektbibliotheken verfügbar sind. Bei Late Binding kannst du per Code prüfen, ob die benötigte Objektbibliothek überhaupt vorhanden ist und anschließend darauf verweisen bzw. das Problem "abfangen".
Bei Early Binding wird vorausgesetzt, dass die Bibliothek vorhanden ist. Wenn die Objektbiliothek aber nicht vorhanden ist, können der auf die verwiesene Objektbiliothek verwendete Code nicht interpretiert werden, da die verwendeten Objekte und ihre Eigenschaften nun völlig unbekannt sind. Das führt unausweichlich zu Fehlermeldungen.
Viele Grüße
Martin
Anzeige
AW: Late oder Early Binding?
12.05.2020 14:09:33
Klaus
Danke Leute, das hat geholfen!
AW: Late oder Early Binding?
13.05.2020 11:26:26
Sebastian
hallo Martin
Du schreibst, mit Late Binding kann man das Problem "abfangen". Kannst Du mal bitte kurz beschreiben, wie?
Gruß, Wastl
AW: Late oder Early Binding?
13.05.2020 11:42:37
ChrisL
Hi
Ganz normales Fehler-Handling z.B.
Sub TEST()
Dim objCon As Object
On Error GoTo errorhandler
'Set objCon = CreateObject("ADODB.Connection")
Set objCon = CreateObject("XXXX.Connection") ' provoziert Fehler
' weiterer Code
MsgBox "alles OK"
Set objCon = Nothing
Exit Sub
errorhandler:
MsgBox "Verbindung konnte nicht aufgebaut werden."
Set objCon = Nothing
End Sub
cu
Chris
Anzeige
AW: Late oder Early Binding?
13.05.2020 12:05:49
Sebastian
Verstehe.
Zum Laufen kommt das Makro ja trotzdem nicht. Wo ist dabei der Vorteil zu Early Binding?
AW: Late oder Early Binding?
13.05.2020 13:31:57
ChrisL
So gesehen hast du auch wieder recht. :)
Zum Laufen kommt das Makro ja trotzdem nicht.
Wenn es nur ums Laufen ginge, könnte man generell auf jegliches Fehlerhandling verzichten, was jedoch nicht der "best practice" entspricht.
Mit einem Fehlerhandling kann man u.a. die Fehler genauer unterscheiden (z.B. ob die Bibliothek gänzlich fehlt oder ob die Internetverbindung unterbrochen ist). Oder man kann eine individuelle Anweisung geben, wie das Problem zu behandeln ist. Plus kann man im Fehlerfall den Prozess sauber abschliessen (z.B. Events wieder einschalten und Objektvariablen leeren).
Oder in anderen Anwendungen z.B. prüfen ob Adobe oder Outlook verfügbar ist und wenn nicht, die Aufgabe über eine alternative Applikation bzw. Methode erledigen.
Weitere Beispiele fallen mir im Moment nicht ein. Aber die Tatsache, dass du Probleme spezifisch abfangen kannst, kann je nach Situation schon von Vorteil sein.
Anzeige
AW: Late oder Early Binding?
13.05.2020 14:52:52
Sebastian
OK, verstehe. Mit anderen Anwendungen habe ich noch nichts zu tun.
Ich frage mich jedes Mal, wenn ich einen Dictionary einsetze, warum ich das mit LB tun soll. Wenn der Anwender, der die Excel-Datei mit Makro bekommt, das “Microsoft Scripting Runtime” nicht hat, dann nutzt das Early Binding auch nichts.
Grüsse, Sebastian
Anzeige
AW: Late oder Early Binding?
13.05.2020 15:36:30
ChrisL
Überprüfe noch einmal die Begrifflichkeit. Ich glaube du verwendest Early und Late verkehrt herum.
(... dann nutzt das Late Binding auch nichts.)
(Zum Laufen kommt das Makro ja trotzdem nicht. Wo ist dabei der Vorteil zu Late Binding?)
Ja, wenn eine Applikation oder Scripting Runtime gar nicht vorhanden ist, dann bringt Late Binding keinen grossen Vorteil. Wenn die Applikation aber in anderer Version vorhanden ist, dann schon. Wenn du in den Verweisen nachschaust siehst du, dass es diverse Bibliotheken mit Versionsangabe gibt. Im Late Binding bist du tendenziell unabhängiger von der Version (siehe mein erster Post).
Ich verwende i.d.R. Late Binding deswegen (Version) und nicht wegen dem Fehlerhandling. Aber wie bereits erwähnt, hast du in deinem spezifischen Beispiel sowieso eine Versionsabhängigkeit, weshalb ich hier ausnahmsweise auch ein Early Binding in Betracht ziehen würde.
cu
Chris
Anzeige
;
Anzeige

Infobox / Tutorial

Late oder Early Binding in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Verstehen der Begriffe: Early Binding bedeutet, dass Du eine spezifische Objektbibliothek in Deinem VBA-Projekt referenzierst, bevor Du den Code ausführst. Late Binding hingegen verwendet CreateObject, um zur Laufzeit eine Verbindung herzustellen.

  2. Beispiel für Early Binding:

    Dim con As ADODB.Connection
    Set con = New ADODB.Connection
  3. Beispiel für Late Binding:

    Dim con As Object
    Set con = CreateObject("ADODB.Connection")
  4. Verwendung: Wähle Early Binding, wenn Du sicherstellen kannst, dass die benötigte Bibliothek auf dem Zielrechner vorhanden ist. Andernfalls ist Late Binding die bessere Wahl, um Versionskonflikte zu vermeiden.


Häufige Fehler und Lösungen

  • Fehler: "Objektbibliothek nicht gefunden"

    • Lösung: Überprüfe die Referenzen in Deinem VBA-Projekt. Bei Early Binding muss die Bibliothek vorhanden sein.
  • Fehler: "Fehler beim Erstellen des Objekts"

    • Lösung: Stelle sicher, dass Du den richtigen Namen der Bibliothek im CreateObject-Befehl verwendest.

Alternative Methoden

  • Verwendung von Error Handling: Mit Late Binding kannst Du Fehler besser abfangen. Nutze On Error GoTo, um spezifische Fehler zu behandeln.

    On Error GoTo errorhandler
    Set objCon = CreateObject("XXXX.Connection") ' provoziert Fehler
    Exit Sub
    errorhandler:
    MsgBox "Verbindung konnte nicht aufgebaut werden."
  • Versionsunabhängigkeit: Late Binding ist oft die bessere Wahl, wenn Du eine Anwendung schreibst, die auf verschiedenen Versionen von Excel oder Access laufen soll.


Praktische Beispiele

  • Early Binding Beispiel:

    Dim cmd As ADODB.Command
    Set cmd = New ADODB.Command
  • Late Binding Beispiel:

    Dim cmd As Object
    Set cmd = CreateObject("ADODB.Command")

Beide Methoden haben ihre Vor- und Nachteile. Während Early Binding die Entwicklung beschleunigt, ermöglicht Late Binding mehr Flexibilität.


Tipps für Profis

  • VBA Early vs Late Binding: Wenn Du mit mehreren Office-Anwendungen arbeitest, nutze Late Binding, um sicherzustellen, dass Dein Code nicht an eine spezifische Version gebunden ist.

  • Zugriff auf Excel-Daten: Achte beim Arbeiten mit Excel und Access darauf, wie Du Deine Verbindungen und Kommandos definierst. Late Binding kann hier oft hilfreich sein, um Probleme mit fehlenden Bibliotheken zu vermeiden.

  • Vermeidung von Excel XLSB Nachteilen: Wenn Du Makros in einer XLSB-Datei speicherst, stelle sicher, dass alle nötigen Bibliotheken auf dem Zielrechner vorhanden sind, um Laufzeitfehler zu vermeiden.


FAQ: Häufige Fragen

1. Was ist der Hauptunterschied zwischen Early Binding und Late Binding?
Early Binding erfordert die Referenzierung einer spezifischen Bibliothek im Voraus, während Late Binding diese zur Laufzeit erstellt.

2. Wann sollte ich Early Binding verwenden?
Verwende Early Binding, wenn Du sicher bist, dass die Zielumgebung die notwendige Objektbibliothek hat, da es die Entwicklung durch IntelliSense erleichtert.

3. Welche Vorteile bietet Late Binding?
Late Binding ist ideal für Anwendungen, die auf unterschiedlichen Versionen von Office laufen sollen, da es Versionskonflikte vermeidet.

4. Wie kann ich Fehler beim Late Binding abfangen?
Nutze standardmäßiges Fehler-Handling in VBA, um spezifische Fehler zu identifizieren und entsprechende Maßnahmen zu ergreifen.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige