Zoeken…
Vroeg binden versus laat binden
Binding is het proces waarbij een object wordt toegewezen aan een identifier of variabelenaam. Vroege binding (ook bekend als statische binding) is wanneer een in Excel gedeclareerd object van een specifiek objecttype is, zoals een werkblad of werkmap. Late binding treedt op wanneer algemene objectkoppelingen worden gemaakt, zoals de aangiftetypen Object en Variant.
Vroege binding van referenties enkele voordelen ten opzichte van late binding.
- Vroege binding is operationeel sneller dan late binding tijdens runtime. Het creëren van het object met late binding in runtime kost tijd die vroege binding bereikt wanneer het VBA-project in eerste instantie wordt geladen.
- Vroege binding biedt extra functionaliteit door de identificatie van sleutel / item-paren aan hun rangorde.
- Afhankelijk van de codestructuur kan vroege binding een extra niveau van typecontrole bieden en fouten verminderen.
- De hoofdlettercorrectie van de VBE bij het typen van de eigenschappen en methoden van een gebonden object is actief bij vroege binding maar niet beschikbaar bij late binding.
Opmerking: u moet de juiste verwijzing naar het VBA-project toevoegen via de opdracht Extra → Verwijzingen van de VBE om vroege binding te implementeren.
Deze bibliotheekreferentie wordt vervolgens meegevoerd met het project; er hoeft niet opnieuw naar te worden verwezen wanneer het VBA-project wordt gedistribueerd en op een andere computer wordt uitgevoerd.
'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
Als u echter vroege binding gebruikt en het document wordt uitgevoerd op een systeem dat een van de bibliotheken mist waarnaar u hebt verwezen, zult u problemen ondervinden. Niet alleen zullen de routines die de ontbrekende bibliotheek gebruiken niet goed werken, maar het gedrag van alle code in het document zal onregelmatig worden. Het is waarschijnlijk dat geen enkele code van het document op die computer zal werken.
Dit is waar late binding voordelig is. Bij late binding hoeft u de referentie niet toe te voegen in het menu Extra> Verwijzingen. Op machines met de juiste bibliotheek werkt de code nog steeds. Op machines zonder die bibliotheek werken de opdrachten die naar de bibliotheek verwijzen niet, maar alle andere code in uw document blijft functioneren.
Als u niet goed bekend bent met de bibliotheek waarnaar u verwijst, kan het handig zijn om vroege binding te gebruiken tijdens het schrijven van de code en vervolgens over te schakelen naar late binding voor implementatie. Op die manier kunt u profiteren van de IntelliSense en Object Browser van de VBE tijdens de ontwikkeling.