早期绑定与后期绑定

验证对象是否存在以及指定的属性或方法有效的过程称为绑定。 可以进行两次此验证过程:在编译时(早期绑定)或运行时(后期绑定)。 当您将对象变量声明为特定的数据类型时,您正在使用“早期绑定”,因此可以在编译时进行验证。 当声明通用对象数据类型的变量时,您正在使用后期绑定。 在这种情况下,VBA必须在执行任何VBA语句(包括对对象或其属性或方法之一的引用)的过程中找到并验证对象信息。 早期绑定和后期绑定之间的时间差异可能非常明显。 下面列出了一些早期绑定的示例:

  1. 昏暗的appAccess作为Access.Application
  2. 昏暗的appExcel作为Excel.Application
  3. 昏暗winExcel作为Excel.Window
  4. 昏暗winProject作为Project.Window
  5. 昏暗的chkBox作为复选框
  6. 昏暗的cboFinance作为ComboBox
  7. 昏暗的cht主要作为图表
  8. 昏暗的lstLookup作为ListBox
  9. 昏暗的pvtNew作为数据透视表
作为示例,我将ADO字段称为ADODB.Field,也将其称为对象(注释掉)。 使用下面的代码进行的基准测试过程报告了访问ADO字段的属性的速度之间的巨大差异,这自然是对早期绑定的支持。 该代码在下面列出。

Dim rst As ADODB.Recordset, strName As String 
'Early Binding. Declaring fld as ADODB.Field results in
'times that are around 7% of those measured declaring fld
'as Object. In the case of several hundred Records, the difference
'would not be significant, but in the case of several hundred
'thousand Records, the time difference would be enormous.
Dim fld As ADODB.Field 
'Late Binding
'Dim fld As Object 
Set rst = New ADODB.Recordset
Set rst.ActiveConnection = CurrentProject.Connection
rst.Source = "tblEmployee"
rst.CursorType = adOpenStatic 
rst.Open 
rst.MoveFirst 
Set fld = rst.Fields(0)
Do While Not rst.EOF
  strName = fld.Name
    rst.MoveNext
Loop 
rst.Close
Set fld = Nothing
Set rst = Nothing
在任何情况下,都尽可能使用最具体的对象类型声明一个变量。 对于访问控制,这意味着使用例如:
Dim cmd As CommandButton
代替:
Dim cmd As Control
或者,最糟糕的是:
Dim cmd As Object

From: https://bytes.com/topic/access/insights/688152-early-vs-late-binding

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值