23学时使用自动化
尽管E x c e l能够做很多事情,并且能够很好地完成,但是,它并不是万能的。例如,E x c e l 显然不适合写信(尽管听说有人这么用,但是笔者不推荐这么做!)。Microsoft Off i c e已经提供了一整套各种用途的应用软件来满足各种不同的需要。在这个学时中,将学习在  E x c e l中使用V B A来控制其他的应用程序。
这个学时的重点包括:
• 讨论什么是自动化
• 自动化基本情况概述
• 怎样添加到自动化服务器的引用
• 使用“对象浏览器”来查看对象库的信息
• 怎样创建自动化服务器的实例
• 使用自动化来控制Microsoft Wo r d应用程序
23.1  什么是自动化
新术语自动化也就是早先的O L E自动化,该技术允许用户把Wi n d o w s应用程序的功能合并到V B A代码中。自动化就是通过一个应用程序来控制另外一个应用程序的处理过程。任何用Wo r d、P o w e r P o i n t、O u t l o o k、A c c e s s、P r o j e c t以及其他许多应用程序能够完成的工作,都可以通过使用自动化在Excel VBA应用程序中完成。把这些应用程序作为工具来使用,就能够为用户的应用程序增添新的功能。如果没有自动化这项技术,要想在  E x c e l中获取这些新功能的话,就需要编写大量的代码,或者干脆就是不可能得到。如果想要把P r o j e c t中工作几个学时的成果到E x c e l中做成图形的话,该怎么办呢?如果需要对E x c e l工作表中的数据生成幻灯片时,又该怎么办呢?听起来倒像是P o w e r P o i n t的工作。
新术语要使用自动化的话,需要把另外一个应用程序的功能合并到自己的应用程序中,那么就必须拥有被合并功能的那个应用程序的副本,而且被合并功能的应用程序还必须支持自动化。完全支持自动化的、基于Wi n d o w s的应用程序显露它们的对象、属性、方法集合,使得这些对象能够被别的应用程序使用。用户使用这些显露的对象,就能够使用应用程序的特性和功能了。如果开发人员以及用户已经拥有了Microsoft Off i c e和其他的O L E兼容的应用程序的话,为什么不使用呢?这些应用程序为用户提供了相似的界面。
23.2  自动化的基本情况
新术语当使用自动化时,需要懂得每个应用程序的作用。当使用自动化时,需要拥有一个控制器应用程序和一个服务器应用程序。控制器应用程序控制自动化服务器应用程序,Vi s u a l B a s i c就是控制器应用程序的一个非常优秀的例子。服务器应用程序把能够被其他应用程序操
作的对象显露出来。在你的应用程序中,E x c e l 将成为控制器应用程序。Dynamic Data Exchange(动态数据交换,缩写为D
D E )和S e n d K e y s 方
法在使用不支持自动化特性的应用程序时可以代替自动化,实现类似的
功能。
23.3  引用自动化服务器
新术语绝大多数支持自动化的应用程序提供了一个对象库。对象库为控制器应用程序提供了服务器应用程序中可以使用的对象的有关信息。要使用对象库信息的话,就需要从控制器应用程序E x c e l 引用对象库。在这个学时中,将通过自动化技术来控制Microsoft Wo r d ,这意味着Wo r d 就是服务器应用程序,因而需要引用Wo r d 。在V B A 编辑器中,选择“工具”、“引用”菜单命令,“引用”对话框显示出来,如图2 3-1所示。选中Microsoft Word 9.0 Object Library 复选框后单击“确定”按钮,对Wo r d 的引用就添加到工程中了。
如果还没有安装Word 2000,那么“引用”对话框中就不会列出这个
对象库,因此就不能够使用Wo r  d 来执行自动化。如果安装了低版本的
Wo r d ( Word 8.0),那么这个学时中介绍的内容仍然适用,只要选中
Microsoft Word 8.0 Object Library 复选框就可以了。如果系统上安装的
Wo r d 最高版本是Word 95,那么后面介绍的示例就不可使用,因为Wo r d
9 5不支持V B A 。Word 97(Word 8.0)是最早使用V B A 的版本。在这以前
的Wo r d 版本使用Wo r d B a s i c 作为其自动化语言。
23.4  浏览对象库的内容
“对象浏览器”允许浏览对象库的那些显露出来的对象。“对象浏览器”列出了显露对象的所有属性、事件、方法。要查看Microsoft Wo r d 的对象库信息,选择“视图”、“对象浏览器”菜单命令来显示“对象浏览器”窗口,如图2 3-2所示,从工程/库列表框(第一个下拉式列表框)中选择Wo r d 来显示Wo r d 对象库的内容。可以选择一个对象,查看它的属性和方法。当完
188中文Excel 2000编程2 4学时教程图23-1  “引用”对话框用
来选中自动化使用
的对象库
www.6ago
成以上操作时,关闭对象浏览器。
23.5  创建自动化服务器的实例
添加自动化服务器的引用到工程中只是使得自动化能够使用,并不意味就能够实际使用自动化了。要使用对象库,必须创建自动化服务器的实例,这是通过代码来完成的,使用
C r e a t e O b j e c t 语句就能够实现。C r e a t e O b j e c t 用来创建服务器的新实例,这就意味着在自己的过程中能够使用服务器应用程序的对象、方法和属性了。程序清单  2 3-1给出了创建到Wo r d 的引用时所需要的代码。
程序清单23-1  创建Wo r d 的实例
1:  Dim y As Wo r d .A p p l i c a t i o n
2: Set y = CreateObject("Wo r d .A p p l i c a t i o n ")
在创建了服务器应用程序的实例以后,就可以使用该实例的所有对象、方法和属性了,就跟使用E x c e l 一样。
好了,现在是指出细节的时候了。Wo r d 使用V B A 作为其自动化语言,E x c e l 使用V B A 作为其自动化语言。Wo r d 有宏录制器,E x c e l 也有宏录制器。这些事实给你什么启示呢?这意味着可以在Wo r d 中录制宏,然后可以把生成的代码复制到E x c e l 过程中!当然需要对代码做细微的修改,稍后再具体说明这一点。
23.6  使用自动化来控制Microsoft Word
我们准备创建一个简单的应用程序,它把单元格区域中的值插入到一封信中。在开始录制宏之前,需要准备好几件事情,首先需要在Wo r d 中创建这封信(实际上,可以使用代码从E x c e l 中创建信,但是现在不准备这么做),启动Wo r d 来创建下面的信:
To Sales Manager:
Below you 'll find the latest sales figures.If you have any questions please do not hesitate
第23学时使用自动化
189
图23-2  对象浏览器是列出
特定库中对象的一
个很有用的工具
vba做excel窗体录入教程
to contact me .
S i n c e r e l y .The Boss
新术语把信保存为S a l e s ,现在,我们准备通过添加书签来对信做一些修改。书签是Wo r d 文档中的命名位置。要添加需要的书签,请执行下面的步骤:
1)在文本Sales Manager 的开头定位插入点。
2)选择“插入”、“书签”,“书签”对话框显示出来。
3)输入R e g i o n 作为书签的名称,单击“添加”,这就创建了第一个书签。
4)在文本S i n c e r e l y 之前添加一个空行,在空行上定位插入点。在这个位置添加书签,把它命名为S a l e s I n f o 。
5)保存文档并关闭它,最小化Wo r d 。
下一步将在E x c e l 中完成。创建图2 3-3所示的工作表,该工作表的信息最终将复制并粘贴到S a l e s 文档中。
返回到Wo r d ,开始录制命名为S a l e s S t u f f 的宏(需要打开一个空文档)。要在Wo
r d 中录制宏的话,使用跟E x c e l 中一样的步骤:选择“工具”、
“宏”、“录制新宏”菜单命令。
要完成录制宏,请执行下面的步骤:
1)选择“文件”、“打开”,打开S a l e s 文档。
2)选择“编辑”、“转到”,从“转到”列表框中选择“书签”,选择R e g i o n 作为要跳转到的第一个书签,单击“转到”按钮。
3)选择S a l e s I n f o 作为下一个要跳转到的书签,单击“转到”按钮。
4)单击“关闭”按钮来关闭对话框。
190中文Excel 2000编程2 4学时教程图23-3  图中的销售信息将
复制粘贴到S a l e s
文档中
www.6ago
第23学时使用自动化191 5)停止录制宏。
选择“工具”、“宏”、“宏”来访问“宏”对话框,选择S a l e S t u f f,单击“编辑”来查看录制下来的代码。这个过程中有许多额外的代码,编辑该过程,使得跟程序清单  2 3-2中给出的一样。
程序清单23-2  编辑后的S a l e S t u f f过程
1: Sub SaleStuff ()
2 :
3:    Documents.Open FileName:="s a l e s.d o c"
4:    Selection.GoTo What:=wdGoToBookmark, Name:="R e g i o n"
5:    Selection.GoTo What:=wdGoToBookmark, Name:="S a l e s I n f o"
6 :
7: End Sub
这些代码将作为在E x c e l中创建过程的基础。剪切这个过程的代码,关闭Wo r d,返回到E x c e l。打开Visual Basic编辑器,添加模块到该工作簿中,把剪切的代码粘贴到这个模块中。下一步是编辑这些代码:首先需要创建Wo r d的实例,然后需要对粘贴的代码做一些修改。每一行代码需要以变量开头,该变量在创建Wo r d的实例时设置。实现这一点的最简单方式是采用Wi t h语句,修改过程使得跟程序清单2 3-3中给出的代码一样。
程序清单23-3  添加实例到Wo r d中
1: Sub SaleStuff ()
2:    Dim y As Wo r d.A p p l i c a t i o n
3:    Set y = CreateObject("Wo r d.A p p l i c a t i o n")
4 :
5:    With y
6:          .Documents.Open Filename:= "s a l e s.d o c"
7:          .Selection.GoTo What:=wdGoToBookmark, Name:= "R e g i o n"
8:          .Selection.GoTo What:=wdGoToBookmark, Name:= "S a l e s I n f o"
9:    End Wi t h
1 0:
11: End Sub
我们就快要完成所有工作了,现在,只需要添加代码来把信息从E x c e l复制并粘贴到Wo r d 中。程序清单2 3-4给出了完整的过程,修改的部分用黑粗体标出。
程序清单23-4  SaleStuff过程的最终版本
1: Sub SaleStuff ()
2:    Dim y As Wo r d.A p p l i c a t i o n
3:    Set y = CreateObject("Wo r d.A p p l i c a t i o n")
4 :
5:    With y
6:        .Visible = Tr u e
7:    'The path listed in the next step may be different
8:    'on your own machine.Change as needed.
9:        .Documents.Open Filename:= "d:\excel vba\sales.doc"
10:          Wo r k s h e e t s("S h e e t1") .R a n g e("B 1") .C o p y
11:        .Selection.GoTo What:=wdGoToBookmark, Name:= "R e g i o n"
12:      .Selection.Paste

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。