绑定是将对象分配给标识符或变量名的过程。早期绑定(也称为静态绑定)是指在Excel中声明的对象属于特定对象类型(例如工作表或工作簿)的情况。进行常规对象关联(例如Object和Variant声明类型)时,将发生后期绑定。
与后期绑定相比,引用的早期绑定具有一些优势。
在运行时,早期绑定在操作上比后期绑定要快。在运行时创建具有后期绑定的对象需要花费时间,而最初加载VBA项目时,要完成早期绑定。
早期绑定通过按键/项对的顺序位置标识来提供其他功能。
根据代码结构,早期绑定可以提供更高级别的类型检查并减少错误。
键入绑定对象的属性和方法时,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.AddKey:="Red", Item:="Balloon" dict.AddKey:="Green", Item:="Balloon" dict.AddKey:="Blue", Item:="Balloon" 'iterate through the keys For Each k In dict.Keys Debug.Printk & " - " & 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.AddKey:="Red", Item:="Balloon" dict.AddKey:="Green", Item:="Balloon" dict.AddKey:="Blue", Item:="Balloon" dict.AddKey:="White", Item:="Balloon" 'iterate through the keys For Each k In dict.Keys Debug.Printk & " - " & dict.Item(k) Next k 'iterate through the keys by the count For d = 0 Todict.Count- 1 Debug.Printdict.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.Printdict.Keys(d) & " - " & dict.Items(d) Next d dict.Remove"blue" 'remove individual key/item pair by key dict.Removedict.Keys(0) 'remove first key/item by index position dict.Removedict.Keys(UBound(dict.Keys)) 'remove last key/item by index position dict.RemoveAll 'remove all remaining key/item pairs End Sub
但是,如果使用的是早期绑定,并且文档在缺少引用的库之一的系统上运行,则会遇到问题。利用缺少的库的例程不仅不能正常运行,而且文档中所有代码的行为也将变得不稳定。该文档的代码很可能都无法在该计算机上运行。
这是后期绑定比较有利的地方。使用后期绑定时,不必在“工具”>“参考”菜单中添加参考。在具有适当库的计算机上,代码仍将起作用。在没有该库的机器上,引用该库的命令将不起作用,但是文档中的所有其他代码将继续起作用。
如果您不完全熟悉所引用的库,则在编写代码时使用早期绑定,然后在部署之前切换到后期绑定可能会很有用。这样,您可以在开发过程中利用VBE的IntelliSense和对象浏览器。