excel_vba_编程教程(完整版)-第82部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
End If
End Sub
10。接下来……
在本章中,你获得了便利的事件经验和Excel的事件编程,这是无价的技术,不管你是否
计划给他人创建电子表格应用软件,还 是简单地将你的日常任务自动化。Excel提供了许多你
可以响应的事件。通过编写事件过程,你可以更改对象对事件的响应方式。 你的事件过程可以
简单为一条语句,仅仅显示一自定义信息;也可以复杂到包括一些判断语句和其它允许你改变你
的程序流的编 程结构。当某个事件发生时,VB将会直接运行适当的事件过程,而不是按标准
的内置方式进行响应。 你已经学习了一些编写在标准模块里的事件过程(工作簿,工作表,
图表工作表),然而,其它的(内嵌图表,应用软件,查询 表)则需要你在类模块里面使用
WithEvents关键字创建一个新对象。你也学习了你可以使用EnableEvents属性激活或者禁止事
件。
在下章,你将学习如何使用Excel VB环境下的VBA过程来使用Access数据库。
第十五章 在 Excel里使用 Access
在第九章里面,你已经学习了从Excel里通过自动控制(用于允许一个应用程序控制另外
一个应用程序的对象)来操纵Word和 Outlook。本章将给演示如何编程从Excel里使用Access,
使用下述方法获取Access数据到电子表格里面:Automation,DAO (Data Access Objects)以及
ADO (ActiveX Data Objects)。在你学习如何使用Excel VBA在Access数据库里执行各种任务
以及获取和存 储数据于Access数据库之前,我们来粗略地介绍一下,Microsoft Access用来
编程对其对象访问的数据访问方法。
1。对象库
Access数据库包含各种类型的对象,储存在不同的对象库里面,用来使用VBA语言显示、存
储或者管理数据。在本章,你将涉 猎下面列出的几个库里的对象、属性和方法。
Access 10。0对象库提供了用来显示数据和在Access 2002应用软件上使用的对象。该库储存子
在MSACC10。OLB文件里,并且
可以自阿C:Program FilesMicrosoft OfficeOffice文件夹里面找到。在引用对话框上设置
了对该库的引用之后(将在下节涉及), 你将能够在对象浏览器里面访问该库的对象、属性和
方法(参见图15…1)。
289
… 页面 306…
图15…1 Access库 (译者:截图为Office 2003。Access库文件为MSACC。OLB)
Access DAO 3。6对象库提供了数据访问对象(DAO),让你决定你的数据库的结构和使用VBA操作数据。
该库储存在DAO360。DLL
文件里,并且可以在C:Program Filesmon FilesMicrosoft SharedDAO文件夹里找到。
在引用对话框上设置了对该库的引 用之后(将在下节涉及),你将能够在对象浏览器里面访
问该库的对象、属性和方法(参见图15…2)。
图15…2 DAO库
Microsoft ActiveX Data Objects 2。5 (ADO) 提供了控件数据对象(ADO)并且允许你使用OLE DB
供应者访问和操作数据。ADO
使得在Access数据库里对数据源创建链接,读取,插入,修改和删除数据成为可能。该库储存
于MSADO15。DLL里面,并可以
在C:Program Filesmon Filessystemado文件夹里找到。在引用对话框上设置了对该库
的引用之后,你将能够在对象浏览 器里面访问该库的对象、属性和方法(参见图15…3)。
290
… 页面 307…
图15…3 ADODB库
Microsoft ADO Ext。 2。5 for DDL(动态数据链接) and Security(安全) (ADOX) 储存让你
定义数据库结构和安全的对象。例如, 你可以定义表格,索引和关系,以及创建和修改用户
和用户组帐户。
该库储存在MSADOX。DLL里并且可以在C:Program Filesmon FilesSystemado文件夹里找
到。在引用对话框上设置了对 该库的引用之后,你将能够在对象浏览器里面访问该库的对象、
属性和方法(参见图15…4)。
图15…4 ADOX库
Microsoft Jet and Replication Objects 2。6 库(JRO)包含用于对象库复制的对象。该库储存
在MSJRO。DLL里并在C:Program
Filesmon FilesSystemado文件夹里可以找到。在引用对话框上设置了对该库的引用之
后,你将能够在对象浏览器里面访 问该库的对象、属性和方法(参见图15…5)。
291
… 页面 308…
图15…5 JRO库
VBA对象库提供了很多VBA对象,函数和方法供你访问文件系统,操作日期和时间函数,进行数学
和财务计算,与用户互动,转
换数据和读取文本文件。该库储存在VBE6。DLL文件里,位于C:Program Filesmon
FilesMicrosoft SharedVBAVBA6文件 夹里。当你安装Microsoft Excel 2002时,就会自动
设置对该库的引用。该库在Office 2002所有的应用软件中共享(参见图15…6)。
图15…6 VBA库
2。建立对对象库的引用
要操作Access 2002里的对象的话,首先就得创建对Microsoft Access 10。0对象库的引用。
1。 在VB编辑器窗口,选择工具|引用以打开引用对话框。该对话框列出了你电脑上所有可用的
类型库
2。 在清单上找到Microsoft Access 10。0 Object Library,并勾选上它
3。 关闭引用对话框 一旦创建了对Access类型库的引用,你就可以使用对象浏览器来查看该
应用软件的对象,属性和方法了 (参见前面的图15…1)。 使用引用对话框创建对其它将在本章
练习中访问对象库的引用。你可以在前面部分里找到库清单。你可以忽略对Microsoft Jet and
Replication Objects 2。6 Library (JRO)的引用,因为这里不会用到它。 如果你对数据库
复制有兴趣的话,那么可以找到很多有关Access编程的书涉及该主题,包括本人的书Learn
Microsoft Access
292
… 页面 309…
2000 Programming by Example (Wordware Publishing (ISBN 1…55622…770…1))。
技巧15…1 创建对Access对象库引用的好处
当你设置对Access对象库的引用时,你将获得下述好处:
… 你可以在对象浏览器里面查看Access的对象,属性和方法
… 你可以在VBA过程里直接运行Access函数
… 你可以声明该应用软件类型的对象变量,而不必声明普通的Object类型。声明变量为Dim
objAccess As Access。Application
(早期捆绑)要比将其声明为Dim objAccess As Object (后期捆绑)要快。
… 你可以在你的VBA代码里使用Access内置常量
… 你的VBA过程将运行得更快一些
3。链接到 Access
本章中的示例使用了多种链接到Access的方法,本节将详细讨论每种链接方法。你可以使用
下述三种方法之一来建立对Access 的链接:
□ Automation
□ Data Access Objects (DAO)
□ ActiveX Data Objects (ADO)
要访问数据库里的数据的话,你就得打开它。如何打开某个具体的数据库,很大程度上取决于
你使用了哪种数据库的链接方法。
4。使用 Automation 链接到 Access 数据库
当你通过Automation从Excel(或者其它应用软件)里使用Access时,你需要采取下述步骤:
1。 设置对Microsoft Access 10。0 Object Library的引用(参见本章前面的“建立对对象库
的引用”)
2。 声明一个对象变量,代表Access应用软件对象
Dim objAccess As Access。Application
在该声明中,objAccess为变量名称,而Access。Application用提供该对象的VB对象库的名
称来限定该变量。
3。 返回引用到应用软件对象上,并且将该引用到该对象变量。使用CreateObject函数,
GetObject函数或者关键字New来返回 应用软件对象的引用。使用Set语句将应用赋值到对
象变量。
Dim objAccess As Object
Set objAccess = CreateObject(“Access。Application。10”) 当对象还没有实例时,可
以使用CreateObject函数返回一个引用到应用软件对象。如果Access已经运行了的话,
那么新的 实例就已创建了并且确定的对象也已创建了。
Dim objAccess As Object
Set objAccess = GetObject(; “Access。Application。10”)
或者
Set objAccess = GetObject(“C:Program Files _
& “Microsoft OfficeOfficeSamplesNorthwind。mdb”) 使用GenObject函数返回引
用到应用软件对象,以使用Access的当前实例,或者开启Access并打开一个文件(更多信息
参见技 巧15…2)
Dim objAccess As New Access。Application 上面的语句使用关键字New,声明了一个
对象变量,返回引用到应用软件对象,并且将该引用赋予对象变量,一步完成。 你也可
以使用两步法来声明一个对象变量,这样,对该对象的控制会更多些:
Dim objAccess As Access。Application
Set objAccess = New Access。Application
□ 当使用关键字New声明对象变量时,Access应用软件并不会打开,直到你开始在VBA代码里
真正使用该对象变量。
□ 当使用关键字New声明应用软件对象变量时,Access的一个新实例就会自动创建,你不需要
使用CreateObject函数
□ 使用关键字New创建应用软件对象的新实例比使用CreateObject函数要快 因为电脑上
可能安装了多个版本的Access,所以需要在函数GetObject或者CreateObject里包括该版本
号。下面列出最后四个 Access版本:
Microsoft Access 2003 Access。Application。11 (译者加)
Microsoft Access 2002 Access。Application。10
Microsoft Access 2000 Access。Application。9
Microsoft Access 97 Access。Application。8
293
… 页面 310…
Microsoft Access 95 Access。Application。7 一旦使用第三步列出的方法之一创建了应用软
件类的新实例,你就可以通过OpenCurrentDatabase或者NewCurrentDatabase方 法的帮助来打
开一个数据库或者创建一个新数据库。你可以使用CloseCurrentDatabase方法关闭你在程序里
打开的Access数据 库。
技巧15…2 GetObject函数的参数
GetObject函数的第一个参数 – Pathname – 是可选的。 当你想要使用某个特定文件里的对象
是要用到它。第二个参数 – Class –
是必需的,它明确哪个应用软件创建该对象,以及该对象的类型。当第一个参数为可选的而第二
个为必需的时,你就必须在第一
个参数位置放置一个逗号,如下所示:
Dim objAccess As Object
Set objAccess = GetObject(; Access。Application。10”)
因为GetObject函数的第一个参数(Pathname)被忽略了,所以,就返回对Access