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.



Modified text is an extract of the original Stack Overflow Documentation
Licencjonowany na podstawie CC BY-SA 3.0
Nie związany z Stack Overflow