早期結合與晚期結合
繫結是將物件分配給識別符號或變數名稱的過程。早期繫結(也稱為靜態繫結)是指在 Excel 中宣告的物件具有特定物件型別,例如工作表或工作簿。在進行常規物件關聯時會發生延遲繫結,例如 Object 和 Variant 宣告型別。
引用的早期繫結比後期繫結具有一些優勢。
- 在執行期間,早期繫結在操作上比後期繫結更快。在執行時使用後期繫結建立物件需要花費時間,以便在最初載入 VBA 專案時完成早期繫結。
- 早期繫結通過按順序位置識別 Key / Item 對來提供額外的功能。
- 根據程式碼結構,早期繫結可以提供額外級別的型別檢查並減少錯誤。
- 鍵入繫結物件的屬性和方法時,VBE 的大寫校正在早期繫結時是活動的,但在後期繫結時不可用。
注意: 你必須通過 VBE 的工具→引用命令向 VBA 專案新增適當的引用,以實現早期繫結。
然後隨專案一起提供該庫參考; 當 VBA 專案在另一臺計算機上分發並執行時,不必重新引用它。
'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
但是,如果你使用早期繫結並且文件在缺少你引用的庫之一的系統上執行,則會遇到問題。利用缺失庫的例程不僅不能正常執行,而且文件中所有程式碼的行為也將變得不穩定。很可能文件的程式碼都不能在該計算機上執行。
這是後期繫結有利的地方。使用後期繫結時,你不必在工具>參考選單中新增引用。在具有適當庫的計算機上,程式碼仍然有效。在沒有該庫的計算機上,引用該庫的命令將不起作用,但文件中的所有其他程式碼將繼續執行。
如果你不熟悉所引用的庫,則在編寫程式碼時使用早期繫結可能很有用,然後在部署之前切換到後期繫結。這樣,你就可以在開發過程中利用 VBE 的 IntelliSense 和物件瀏覽器。