excel_vba_编程教程(完整版)-第51部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
后,立即就回到过程里面去继续剩余的指令(因此,你没有机会立即使用该应用程序)。你如果使
用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语句来启动一个程序,以及在应用程序之间切换,那么我们来看看
一个应用程序是如何与另外一个应用程序交流的。对于一个应用程序来说,要控制另一个应用程序
的最简单的方式就是使用SendKeys语句。该语句允许你将许多的按键发送到活动应用程序窗口,你
可以发送一个或组合键并且得到直接使用键盘的同样效果。SendKeys语句如下所示:
SendKeys string '; wait'
这个必须的参数string是你要发送到活动应用程序窗口的键或组合键,例如,使用下列指令来发送
字母“f”键:
SendKeys 〃f〃
要发送组合键Alt+f,使用:
SendKeys 〃%f〃
百分符号(%)是表示Alt键的字符串。要发送例如Shift+Tab的组合键的话,那么就要使用下面的
语句:
SendKeys 〃+{TAB}〃
加号(+)表示Shift键。要发送其它键或者其它组合键的话,请参见表9…3列出的相应字符串。
技巧9…1 SendKeys和其它应用程序
你只能发送按键到那些为微软视窗操作系统设置的应用程序。
技巧9…2 SendKeys和被保护的字符
有些字符在和SendKeys语句一起使用时具有特殊的意义,它们是:加号(+),脱字符号(^),符合
(~)和括号()。要发送这些字符到另一个应用程序的话,就必须将它们用打括号{}括起来。要发
送打括号时,则需要输入{{}和{}}
SendKeys语句的第二个参数是可选的,wait是个逻辑值True或者False。如果是False(缺省),那
么VB在发送按键后立即返回过程,如果为True,那么VB只有在发送的按键执行后才能返回到过程。
如果要发送一个表格9…3里面没有列出的字符的话,那么记住这些代码必须用引号括起来,例如:
SendKeys “{BACKSPACE}”
表9…3 SendKeys语句里使用的按键代码
键 代码 键 代码
空格键 {BACKSPACE} 滚动锁定 {SCROLLLOCK}
{BS} Tab {TAB}
{BKSP} 向上箭头 {UP}
Break键 {BREAK} F1
大写锁定键 {CAPSLOCK} F2 {F2}
删除键 {DELETE} F3 {F3}
{DEL} F4 {F4}
向下箭头 {DOWN} F5 {F5}
End键 {END} F6 {F6}
回车键 {ENTER} F7 {F7}
~ F8 {F8}
Esc键 {ESC} F9 {F9}
帮助键 {HELP} F10 {F10}
Home键 {HOME} F11 {F11}
插入键 {INSERT} F12 {F12}
170
… 页面 187…
{INS} F13 {F13}
向左箭头 {LEFT} F14 {F14}
数字锁定键 {NUMLOCK} F15 {F15}
向下翻页键 {PGDN} F16 {F16}
向上翻页键 {PGUP} Shift +
屏幕打印键 {PRTSC} Ctrl ^
向右箭头 {RIGHT} Alt %
技巧9…3 SendKeys语句对格敏感
当你使用SendKeys语句发送按键时,你一定要牢记区分字符的大小格。因此,要发送组合键Ctrl+d
的话,你必须使用^d,而发送Ctrl+Shift+D的话,