Suche…


Early Binding vs. Late Binding

Bindung ist der Vorgang, bei dem ein Objekt einem Bezeichner oder Variablennamen zugewiesen wird. Eine frühe Bindung (auch als statische Bindung bezeichnet) liegt vor, wenn ein in Excel deklariertes Objekt einen bestimmten Objekttyp aufweist, beispielsweise ein Arbeitsblatt oder eine Arbeitsmappe. Eine späte Bindung tritt auf, wenn allgemeine Objektzuordnungen vorgenommen werden, z. B. die Deklarationstypen Object und Variant.

Frühes Binden von Referenzen einige Vorteile gegenüber dem späten Binden.

  • Die frühe Bindung ist betriebsbereit schneller als die späte Bindung während der Laufzeit. Das Erstellen des Objekts mit einer späten Bindung zur Laufzeit erfordert Zeit, die durch die frühe Bindung beim ersten Laden des VBA-Projekts erreicht wird.
  • Die frühe Bindung bietet zusätzliche Funktionen durch die Identifizierung von Schlüssel- / Artikelpaaren anhand ihrer Ordinalposition.
  • Je nach Codestruktur kann das frühe Binden eine zusätzliche Ebene der Typprüfung bieten und Fehler reduzieren.
  • Die Kapitalisierungskorrektur der VBE beim Eintippen der Eigenschaften und Methoden eines gebundenen Objekts ist mit einer frühen Bindung aktiv, jedoch mit einer späten Bindung nicht verfügbar.

Hinweis: Sie müssen dem VBA-Projekt die entsprechende Referenz über den Befehl Tools → References der VBE hinzufügen, um eine frühe Bindung zu implementieren.
Diese Bibliotheksreferenz wird dann mit dem Projekt mitgeführt; Es muss nicht erneut referenziert werden, wenn das VBA-Projekt auf einem anderen Computer verteilt und ausgeführt wird.

'Looping through a dictionary that was created with late binding¹
Sub iterateDictionaryLate()
    Dim k As Variant, dict As Object
    
    Set dict = CreateObject("Scripting.Dictionary")
    dict.comparemode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k
    
    dict.Remove "blue"      'remove individual key/item pair by key
    dict.RemoveAll          'remove all remaining key/item pairs

End Sub

'Looping through a dictionary that was created with early binding¹
Sub iterateDictionaryEarly()
    Dim d As Long, k As Variant
    Dim dict As New Scripting.Dictionary
    
    dict.CompareMode = vbTextCompare          'non-case sensitive compare model
    
    'populate the dictionary
    dict.Add Key:="Red", Item:="Balloon"
    dict.Add Key:="Green", Item:="Balloon"
    dict.Add Key:="Blue", Item:="Balloon"
    dict.Add Key:="White", Item:="Balloon"
    
    'iterate through the keys
    For Each k In dict.Keys
        Debug.Print k & " - " & dict.Item(k)
    Next k

    'iterate through the keys by the count
    For d = 0 To dict.Count - 1
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    'iterate through the keys by the boundaries of the keys collection
    For d = LBound(dict.Keys) To UBound(dict.Keys)
        Debug.Print dict.Keys(d) & " - " & dict.Items(d)
    Next d
    
    dict.Remove "blue"                         'remove individual key/item pair by key
    dict.Remove dict.Keys(0)                   'remove first key/item by index position
    dict.Remove dict.Keys(UBound(dict.Keys))   'remove last key/item by index position
    dict.RemoveAll                             'remove all remaining key/item pairs

End Sub

Wenn Sie jedoch die vorzeitige Bindung verwenden und das Dokument auf einem System ausgeführt wird, dem eine der Bibliotheken fehlt, auf die Sie verwiesen haben, treten Probleme auf. Die Routinen, die die fehlende Bibliothek verwenden, funktionieren nicht nur nicht ordnungsgemäß, sondern das Verhalten des gesamten Codes innerhalb des Dokuments wird unregelmäßig. Es ist wahrscheinlich, dass auf dem Computer kein Code des Dokuments funktioniert.

Hier ist spätes Binden von Vorteil. Wenn Sie das Late Binding verwenden, müssen Sie den Verweis nicht im Menü Extras> Verweise hinzufügen. Auf Computern, die über die entsprechende Bibliothek verfügen, funktioniert der Code weiterhin. Auf Computern ohne diese Bibliothek funktionieren die Befehle, die auf die Bibliothek verweisen, nicht, aber der gesamte andere Code in Ihrem Dokument funktioniert weiterhin.

Wenn Sie mit der Bibliothek, auf die Sie verweisen, nicht genau vertraut sind, kann es hilfreich sein, die frühe Bindung beim Schreiben des Codes zu verwenden und dann vor der Bereitstellung auf die späte Bindung umzustellen. Auf diese Weise können Sie während der Entwicklung den IntelliSense und den Objektbrowser der VBE nutzen.



Modified text is an extract of the original Stack Overflow Documentation
Lizenziert unter CC BY-SA 3.0
Nicht angeschlossen an Stack Overflow