Excel VBA 前期绑定与后期绑定/答粉丝问

Excel VBA 前期绑定与后期绑定/答粉丝问

本文于2023年7月29日首发于本人同名公众号:Excel活学活用,更多文章案例请搜索关注!

快速浏览

往期合集:【 2023年3月 】【 2023年4月 】【 2023年5月 】【 2023年6月

实用案例:| 收费管理系统 | 中医诊所收费系统| 日期控件 | 简单的收发存 | 电子发票管理助手 |

内容提要

  • 前期绑定与后期绑定

大家好,我是冷水泡茶,昨天有位粉丝朋友在我企业微信咨询代码出错的问题:



今他把原文件发给我,我在我的电脑上运行了一下,没有发现问题:



什么情况?



原来是这个意思!您老人家早说嘛!

我把代码复制到一个新的工作表,果然报错:



很明显,是一个引用Acrobat库的问题。当前采用的方法叫“前期绑定”,需要在引用中勾选Adobe Acrobat x.0 Type Library,由于是将代码复制到新的工作簿,没有勾选这个库,所以出现“用户定义类型未定义”错误。于是,我就这样回复了他:



那么,我们就来勾选一下吧,但我没找到Adobe Acrobat x.0 Type Library,于是就勾选了Acrobat,然后再打开引用,它就变成了Adobe Acrobat 10.0 Type Library



再运行代码,就OK了。

那么,手工勾选引用库是不是不太方便?还有一种方法,叫“后期绑定”,只要我们的电脑里安装了这个库,不管勾选与否都可以正常运行,这里需要调整一下代码:

原代码:

Dim sPDdoc As New Acrobat.AcroPDDoc, tPDdoc As New Acrobat.AcroPDDoc

修改为:

Dim sPDdoc As Object, tPDdoc As Object
Set sPDdoc = CreateObject("AcroExch.PDDoc")
Set tPDdoc = CreateObject("AcroExch.PDDoc")

问题解决,下面我们再来详细讨论一下前期绑定与后期绑定的问题:

何为前期绑定?

前期绑定 是指在定义对象变量的时候,指定特定对象类型,就是前期绑定对象,将外部库的引用信息固定下来。在前期绑定下,可以使用代码提示和自动完成功能。

为了使用前期绑定,我们需要在VBA编辑器的"工具"->"引用"菜单中选择需要使用的外部库(例如,Microsoft Excel对象库、Microsoft Word对象库等)。

在选择了引用后,我们就可以使用该库的对象和成员,并且可以通过对象浏览器查看该库的层次结构和成员信息。

常用 前期绑定对象 定义语句,我们列几个:

' Microsoft Scripting Runtime 对象库(用于字典)
' 显示名称:Microsoft Scripting Runtime
' 实际库名称:scrrun.dll
Dim dic As New Scripting.Dictionary
' Microsoft VBScript 正则表达式 5.5 对象库(用于正则表达式)
' 显示名称:Microsoft VBScript 正则表达式 5.5
' 实际库名称:vbscript.dll
Dim reExp As New RegExp
' Microsoft Scripting Runtime 文件系统对象库(用于文件系统)
' 显示名称:Microsoft Scripting Runtime
' 实际库名称:scrrun.dll
Dim FSO As New Scripting.FileSystemObject
' Microsoft Word 对象库(用于Word对象)
' 显示名称:Microsoft Word xx.x 对象库 (如:Microsoft Word 16.0 对象库)
' 实际库名称:MSWORD.OLB
Dim wordApp As New Word.Application
' Adobe Acrobat 对象库(用于Acrobat对象)
' 显示名称:Adobe Acrobat xx.x Type Library (如:Adobe Acrobat 11.0 Type Library)
' 实际库名称:Acrobat.dll (版本可能不同,例如 AcroPDF.dll)
Dim AcrobatDoc As New AcroExch.AcroApp
Dim AcrobatDoc As New AcroExch.PDDoc
' Microsoft ADO 数据库对象库(用于Access数据库连接对象)
' 显示名称:Microsoft ActiveX Data Objects x.x Library (如:Microsoft ActiveX Data Objects 6.1 Library)
' 实际库名称:msado15.dll
Dim cnADO As New ADODB.Connection
' Microsoft XML v6.0 对象库(用于处理和操作XML数据)
' 显示名称:Microsoft XML v6.0
' 实际库名称:msxml6.dll
Dim xmlDoc As New MSXML2.DOMDocument60

优点:

提供了更好的代码提示和自动完成功能,编写代码更加方便快捷。

在运行时,由于编译器已经知道对象的类型,因此通常比后期绑定更快。

缺点:

需要在代码编写之前明确选择和引用外部库,可能需要一定的了解和确认,如果没有事先勾选引用库,代码就会报错,不能正常运行。

何为后期绑定?

后期绑定 是指在定义对象变量的时候,不指定特定对象,统统声明为 Object 类型的变量,就是后期期绑定对象。在后期绑定中,不需要事先选择引用,而是使用CreateObject或GetObject函数创建外部库的对象实例。在后期绑定下,不能使用代码提示和自动完成功能。

常用 后期绑定对象 定义语句,我们也列几个,与前面的前期绑定对应:

' Microsoft Scripting Runtime 对象库(用于字典)
Dim dic As Object
Set dic = CreateObject("Scripting.Dictionary")
' Microsoft VBScript 正则表达式 5.5 对象库(用于正则表达式)
Dim reExp As Object
Set reExp = CreateObject("VBScript.RegExp")
' Microsoft Scripting Runtime 文件系统对象库(用于文件系统)
Dim FSO As Object
Set FSO = CreateObject("Scripting.FileSystemObject")
' Microsoft Word 对象库(用于Word对象)
Dim wordApp As Object
Set wordApp = CreateObject("Word.Application")
' Adobe Acrobat 对象库(用于Acrobat对象)
Dim AcroApp As Object
Set AcroApp = CreateObject("AcroExch.App")
Dim AcroPDDoc As Object
Set AcroPDDoc = CreateObject("AcroExch.PDDoc")
' Microsoft ADO 数据库对象库(用于Access数据库连接对象)