Sök…


Tidig bindning vs senbinding

Bindning är processen för att tilldela ett objekt till en identifierare eller variabelnamn. Tidig bindning (även känd som statisk bindning) är när ett objekt som deklareras i Excel är av en specifik objekttyp, till exempel ett kalkylblad eller arbetsbok. Sen bindning inträffar när allmänna objektföreningar görs, såsom objekt- och variantdeklarationstyper.

Tidig bindning av referenser vissa fördelar jämfört med sen bindning.

  • Tidig bindning är operationellt snabbare än sen bindning under körning. Att skapa objekt med sen bindning under körning tar tid som tidig bindning åstadkommer när VBA-projektet initialt laddas.
  • Tidig bindning erbjuder ytterligare funktionalitet genom identifiering av nyckel- / objektpar efter deras ordinära position.
  • Beroende på kodstruktur kan tidig bindning erbjuda en ytterligare nivå av typkontroll och minska fel.
  • VBE: s aktiveringskorrigering när du skriver ett bundet objekts egenskaper och metoder är aktivt med tidig bindning men inte tillgänglig med sen bindning.

Obs: Du måste lägga till lämplig referens till VBA-projektet genom VBE: s verktyg → Referenser-kommandot för att implementera tidig bindning.
Denna biblioteksreferens bärs sedan med projektet; det behöver inte hänvisas till när VBA-projektet distribueras och körs på en annan dator.

'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

Men om du använder tidig bindning och dokumentet körs på ett system som saknar ett av de bibliotek som du har refererat kommer du att stöta på problem. Inte bara kommer rutinerna som använder det saknade biblioteket inte att fungera ordentligt, utan uppförandet av all kod inom dokumentet blir ojämnt. Det är troligt att ingen av dokumentets kod kommer att fungera på den datorn.

Det är här som sen bindning är fördelaktig. När du använder sen bindning behöver du inte lägga till referensen i menyn Verktyg> Referenser. På maskiner som har rätt bibliotek fungerar koden fortfarande. På maskiner utan det biblioteket fungerar inte kommandona som refererar till biblioteket, men all den andra koden i ditt dokument kommer att fortsätta att fungera.

Om du inte är väl förtrogen med biblioteket du refererar till kan det vara användbart att använda tidig bindning när du skriver koden och sedan byta till sen bindning innan installationen. På så sätt kan du dra nytta av VBE: s IntelliSense och Object Browser under utvecklingen.



Modified text is an extract of the original Stack Overflow Documentation
Licensierat under CC BY-SA 3.0
Inte anslutet till Stack Overflow