Szukaj…
Wczesne wiązanie vs późne wiązanie
Wiązanie to proces przypisywania obiektu do identyfikatora lub nazwy zmiennej. Wczesne wiązanie (znane również jako wiązanie statyczne) ma miejsce, gdy obiekt zadeklarowany w programie Excel ma określony typ obiektu, taki jak arkusz roboczy lub skoroszyt. Późne wiązanie występuje, gdy tworzone są ogólne skojarzenia obiektów, takie jak typy deklaracji Object i Variant.
Wczesne wiązanie odniesień ma pewne zalety w porównaniu z późnym wiązaniem.
- Wczesne wiązanie jest operacyjnie szybsze niż późne wiązanie w czasie wykonywania. Tworzenie obiektu z późnym wiązaniem w czasie wykonywania wymaga czasu, który wczesne wiązanie osiąga, gdy projekt VBA jest początkowo ładowany.
- Wczesne wiązanie oferuje dodatkową funkcjonalność poprzez identyfikację par Klucz / Przedmiot według ich pozycji porządkowej.
- W zależności od struktury kodu wczesne wiązanie może oferować dodatkowy poziom sprawdzania typu i redukować błędy.
- Korekta wielkich liter VBE podczas wpisywania właściwości i metod obiektu powiązanego jest aktywna w przypadku wczesnego wiązania, ale niedostępna w przypadku późnego wiązania.
Uwaga: Musisz dodać odpowiednie odwołanie do projektu VBA za pomocą polecenia Narzędzia → Referencje VBE, aby wdrożyć wcześniejsze wiązanie.
To odniesienie do biblioteki jest następnie przenoszone z projektem; nie trzeba ponownie się do niego odwoływać, gdy projekt VBA jest dystrybuowany i uruchamiany na innym komputerze.
'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
Jeśli jednak używasz wczesnego wiązania, a dokument jest uruchamiany w systemie, w którym brakuje jednej z bibliotek, do których się odwołujesz, możesz napotkać problemy. Procedury wykorzystujące brakującą bibliotekę nie będą działać poprawnie, ale zachowanie całego kodu w dokumencie stanie się nieregularne. Prawdopodobnie żaden kod dokumentu nie będzie działał na tym komputerze.
W tym przypadku korzystne jest późne wiązanie. W przypadku późnego wiązania nie trzeba dodawać odwołania w menu Narzędzia> Referencje. Na komputerach z odpowiednią biblioteką kod nadal będzie działał. Na komputerach bez tej biblioteki polecenia odnoszące się do biblioteki nie będą działać, ale cały pozostały kod w dokumencie będzie nadal działał.
Jeśli nie znasz dokładnie biblioteki, do której się odwołujesz, przydatne może być wcześniejsze powiązanie podczas pisania kodu, a następnie przełączenie na późniejsze wiązanie przed wdrożeniem. W ten sposób możesz korzystać z IntelliSense i Object Browser VBE podczas programowania.