excel_vba_编程教程(完整版)-第57章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
接输入数据或者复制或移动数据。这些操作——打开应用程序以及在它们之间传输数据时不需要手
动操作的。它们可以通过一些很有趣的VBA函数和指令来自动完成。在本章,你将学习多种从VBA
过程里打开应用程序的方法,并且找到如何使用称为自动化的技术直接从微软Excel直接控制其它
应用程序。
1。启动应用程序
启动一个应用程序的方法不止一个,实际上,你至少可以使用五种方法手动打开某个程序:通过“开
始”|“程序”菜单,快捷键,“运行”命令,MS…DOS窗口,或者在视窗浏览器里双击可执行文件。
本节假设你对手动启动应用程序很熟悉,并且很想从Excel内部的VB编辑窗口试验其它启动应用程
序的方法。
我们从最简单的开始吧——Shell函数。该函数使你可以从VBA过程里直接打开任意程序。假设你的
过程必须打开视窗记事本,要打开记事本,你所有要做的就是在关键字Sub和End Sub之间加上一条
语句,或者更好的方法是在立即窗口里输入下述语句,并且按下回车键:
Shell 〃notepad。exe〃; vbMaximizedFocus
你将立即看到结果。
在上面的语句里,“notepad。exe”是你要打开的程序的名称。如果你担心程序找不到的话,那么该
名称就应该包含完整的路径(启动器名称和文件夹名称)。注意,程序名称用双引号括起来了。Shell
函数的第二个参数可以忽略。该参数明确窗口形式(也就是当程序启动的时候,它如何显示在屏幕
上的)。在上面的例子里,记事本将显示为最大化的窗口。如果没有明确窗口形式,那么程序就会
被最小化(参见表9…1)。
窗口形式常数 值 窗口显示情况
vbHide 0 窗口被隐藏
vbNormalFocus 1 普通大小,并带焦点
vbMinimizedFocus(默认设 2 最小化,并带焦点(这是缺省设置)
置)
vbMaximizedFocus 3 最大化,并带焦点
vbNormalNoFocus 4 普通大小,并失去焦点
vbMinimizedNoFocus 6 最小化,并失去焦点
如果Shell函数能够启动某个可执行文件,那么它就会返回一个叫做任务ID的号码。该号码是指示
应用程序启动的唯一号码。如果Shell函数不成功的话(也就是说某应用程序不能打开),VB就会产
生一错误。如果你要使用Shell函数启动的应用程序的话,就不要在Shell函数后面输入任何语句。
Shell函数启动程序是不同时的,意思是说VB启动Shell函数指定的应用程序,并且,VB在启动程序
后,立即就回到过程里面去继续剩余的指令(因此,你没有机会立即使用该应用程序)。你如果使
用Shell函数来启动控制面板呢?
1。 打开一新工作簿,保存为Chap09。xls
2。 在VB编辑器窗口,插入新模块
3。 重新命名工程为WorkWApplets,模块名为ShellFunction
4。 输入下面显示的过程StartPanel:
Sub StartPanel()
Shell 〃Control。exe〃; vbNormalFocus
End Sub
控制面板里面有很多图标,每个图标执行一个或者多个任务。众所周知,在每个图标后面都有一个
167
… 页面 184…
程序的,当用户双击图标或者用箭头选择该图标然后按下Enter键,该程序都会被激活。作为一个
规律,你总是可以通过查看某个图标的属相来检查什么文件名驱动某个图标。不幸的是,控制面板
里面的图标的属性选择都被禁止了。然后,你可以通过创建一个到该图标的快捷键来查找控制面板
里图标文件。例如,在你创建一个更改电脑原始设置的过程之前,我们来找出激活该图标的文件名
称。
1。 从“开始”菜单里选择“设置”,然后选择“控制面板”(在Windows XP开始菜单里可以直接看
到“控制面板”)
2。 在控制面板窗口里,右键单击“初始选项”图标,并且从快捷菜单中选择创建快捷键
3。 点击确定,将快捷键放在桌面上
4。 关闭控制面板窗口
5。 返回桌面,在初始选项的快捷键上单击右键,然后选择属性
6。 在属性窗口,点击快捷键页,然后点击更改图标按钮
图9…1 每个控制面板里的图标都有一个后缀名为。cpl的文件
7。 写下。cpl文件名称(Control Panel Library)或者动态链接库文件(。dll)并关闭该练习中开
启的所有窗口
表9…2 激活控制面板图标的一些文件示例
控制面板图标 。cpl或者。dll文件
电话和调制解调器选项 TELEPHON。CPL或MODEM。CPL
添加/删除程序 APPWIZ。CPL
网络和拨号连接 NETCPL。CPL或NETSHELL。DLL
32…Bit ODBC ODBCCP32。CPL
系统 SYSDM。CPL
邮件 MLCFG32。CPL
用户和密码 PASSWORD。CPL或NETPLWIZ。DLL
日期/时间 TIMEDATE。CPL
区域选项 INTL。CPL
Internet选项 INETCPL。CPL
声音和多媒体属性 MMSYS。CPL
显示 DESK。CPL
鼠标 MAIN。CPL
下面的国产ChangeSettings示范如何使用Shell函数来启动控制面板的初始设置图标。注意Shell
函数的参数必须写在括号里,如果你后面需要在你的程序里使用它返回值的话。
1。 在当前模块里输入过程ChangeSettings,如下所示:
Sub ChangeSettings()
Dim nrTask
nrTask = Shell(〃Control。exe intl。cpl〃; vbMinimizedFocus)
Debug。Print nrTask
End Sub
2。 运行几次过程ChangeSettings,每次从表9…2里列出的清单里提供一个不同的。cpl文件。你可能
168
… 页面 185…
需要将程序改为:
Sub ChangeSettings2()
Dim nrTask
Dim iconFile As String
iconFile = InputBox(〃Enter the name of the CPL or DLL file:〃)
nrTask = Shell(〃Control。exe 〃 & iconFile; vbMinimizedFocus)
Debug。Print nrTask
End Sub
如果你要启动的程序是微软应用程序,那么除了使用Shell函数外,你还可以很方便地使用VB的方
法ActivateMicrosoftApp来实现。该方法在微软Excel应用程序的对象里是可用的,例如,要从立
即窗口启动PowerPoint的话,你所有要做的事情就是输入下面的指令并且按下Enter:
Application。ActivateMicrosoftApp xlMicrosoftPowerPoint
注意ActivateMicrosoftApp方法要求一个常量来指定要启动的程序。如果PowerPoint没有打开的
话,上面的过程就会打开PowerPoint,但是如果该程序已经打开的话,该指令不会再打开一个新的
PowerPoint界面,只是简单的激活已经在运行的应用程序。你可以结合ActivateMicrosoftApp方法
使用下列常量,常量的名称指名应用程序名称。
应用程序名称 常量
Access xlMicrosoftAccess
FoxPro xlMicrosoftFoxPro
Mail xlMicrosoftMail
PowerPoint xlMicrosoftPowerPoint
Project xlMicrosoftProject
Schedule xlMicrosoftSchedulePlus
Word xlMicrosoftWord
2。在应用程序之间切换
因为用户可以同时在Windows环境下使用多个应用程序,所以你的VBA过程必须要知道如何在打开的
程序之间切换。假设除了Excel之外,你还打开了另外两种应用程序:Word和Explorer。你可以按
照下面的语法使用AppActivate语句来激活已经打开的程序:
AppActivate title '; wait'
只有标题参数是必须的,这是应用程序的名称,正如它显示在应用程序窗口的标题栏那样,或者它
也可以是Shell函数返回的任务ID号码。注意,参数title要跟每个正运行的应用程序的标题字符串
进行对比,如果没有精确的匹配,那么任何标题字符串里前面的字符和参数title一致的应用程序
就会被激活。(译者:例如,你要激活Excel,那么title参数应该是“Microsoft Excel”,如果你
写的是“Microsoft”,那么激活的就也可能是Word,PowerPoint……)。第二个参数wait是可选的,
它是个布尔值(True或False),明确VB什么时候激活应用程序。如果在这里是False的话,该应用
程序就立即会被激活,甚至被调应用程序并没有焦点。如果在wait参数处放置True的话,那么被调
的应用程序就会等到它有了焦点,然后才会激活该应用程序。例如,要激活Word,你就得输入下列
语句:
AppActivate “Microsoft Word”
注意,应用程序名称用双引号引用起来。你也可以使用Shell函数返回的数值作为语句AppActivate
的参数:
‘ run Microsoft Word 运行Word应用程序
ReturnValue = Shell(〃C:Microsoft OfficeOfficeWord。exe〃;1)
‘ activate Microsoft Word 激活Word
AppActivate ReturnValue
语句AppActivate用来在应用程序之间切换,所以要求这些程序已经在运行。该语句仅仅改变焦点,
指定的应用程序变为当前活动的窗口。AppActivate语句不会启动任何应用程序,参见下一章节的
过程FindCPLFiles,这也是使用该语句的一个例子。我们来练习一下最近介绍的几个VBA语句:
169
… 页面 186…
1。 通过在立即窗口里输入下列VBA语句来打开资源管理器:
Shell 〃Explorer〃
按下回车键后,被请求的应用程序就被打开了,带有“我的文档”文件夹的图标就会出现在任务栏
上。
2。 在立即窗口里输入下列代码:
AppActivate 〃My Documents〃
按下回车键后,焦点就会移至我的文档窗口。
3。控制其它应用程序
既然你已经知道了如何使用VBA语句来启动一个程序,以及在应用程序之间切换,那么我们来看看
一个应用程序是如何与另外一个应用程序交流的。对于一个应用程序来说,要控制另一个应用程序
的最简