早期结合与晚期结合
绑定是将对象分配给标识符或变量名称的过程。早期绑定(也称为静态绑定)是指在 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 和对象浏览器。