excel_vba_编程教程(完整版)-第58章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
一个应用程序是如何与另外一个应用程序交流的。对于一个应用程序来说,要控制另一个应用程序
的最简单的方式就是使用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的话,则必须使用字符串:^+d
在本章前期,你学习了。cpl文件启动多种控制面板的图标。你现在要创建的VBA过程目的是要定位
你硬盘上所有扩展名为。cpl的文件。
1。 使用立即窗口来启动资源管理器:
Shell “Explorer。”
“我的文档”图标将出现在屏幕下方的任务栏上。
2。 在当前工程里插入新模块并且重命名为SendKeysStatement
3。 输入过程FindCPLFiles,如下所示:
Sub FindCPLFiles()
' The keystrokes are for Windows 2000
AppActivate 〃My Documents〃
' activate the Search window 激活搜索窗口
SendKeys 〃{F3}〃; True
' move the pointer to the Search for files将光标移到搜索文件
' and folders named text box 和文件夹(名称在文本框里)
SendKeys 〃%m〃; True
' type in the search string 输入要搜索的字符串
SendKeys 〃*。cpl〃; True
' move to the Look in drop down box 焦点移到下拉框
SendKeys 〃{Tab}{Tab}〃; True
' change to the root directory 更改根目录
SendKeys 〃C:”; True
' execute the Search 执行搜索
SendKeys 〃%s〃; True
End Sub
4。 切换到Excel应用程序窗口并且运行过程FindCPLFiles(使用Alt+F8打开宏对话框,选择过程名
称,再点击运行)。
上面过程的第一条语句使用AppActivate语句(参见前面章节)来激活已经打开的应用程序,还记
得你在立即窗口里使用Shell语句激活了资源管理器吗?剩余的语句发送一些必要的按键到活动应
用程序。本过程的结果是扩展名为。cpl的控制面板文件的搜索结果列表。你也可以使用一个
SendKeys语句来发送所有必须的按键(参见下面的例子),然而,一步一步发送按键更容易理解程
序。
Sub FindCPLFiles2()
AppActivate 〃My Documents〃
SendKeys 〃{F3}% m*。cpl{Tab}{Tab}C:%s〃; True
End Sub
4。控制应用程序的其它方法
尽管你可以使用SendKeys语句来传递命令给其它应用程序,但是你还是必须要求助于其它方法来获
得对该应用程序的充分控制。有两种标准方法可以供应用程序和另外一种应用程序交流。最新的方
171
… 页面 188…
法,被称为自动控制,它允许你访问和操纵另一种应用程序的对象。你可以通过自动控制编写VBA
过程,通过引用其它应用程序的对象、属性和方法来控制其它应用程序。在本章接下来的章节里,
你将学习如何通过自动控制来控制其它应用程序。称为DDE(动态数据交换)的老数据交换技术是
允许你在两个应用程序之间动态发送数据的协议,它通过创建一个特殊的通道来发送和结束信息。
DDE非常慢,使用困难,只有当你需要与一个不支持自动控制的老应用程序交流时,才需要使用DDE。
5。了解自动控制
当和另外一个应用程序交流时,你可能需要更多的功能,而不只是激活它来发送按键。例如,你可
能需要在该应用程序里创建和操纵对象,你可以在Excel电子表格力插入整个Word文档。因为Excel
和Word都支持自动控制,所以,你可以在Excel里编写一个VBA过程在操作Word对象,比如文档或者
段落。支持自动控制的应用程序称为自动控制服务器(Automation servers)或者自动控制对象
(Automation objects)。
能够操作服务器对象的应用程序称为自动控制控件。有些应用程序只能是服务器或者控件,而其它
的则既可以是服务器也可以是控件。Microsoft Office 2000和2002都可以作为自动控制服务器和
控件。自动控制控件可以是安装在你电脑上的各种ActiveX控件,你将在下一章里学习这些对象。
6。了解链接和嵌入
在你学习如何使用自动控制从VBA过程控制其它应用程序之前,我们来看一看如何手动链接和插入
对象。人们熟知的OLE,对象链接和嵌入,允许你创建组合文档。组合文档包含其它应用程序创建
的对象。例如,如果你要在Excel里嵌入一个Word文档的话,Excel只要知道创建该对象需要用到的
应用程序名称,以及该对象在屏幕上显示的方法。组合文档有链接或者对象嵌入产生。当你使用手
动方法来嵌入对象时,你首先要在一个应用程序里复制它,再粘贴到另一个应用程序里。链接对象
和嵌入对象的主要区别是对象储存和更新的方式。我们来试验一下:
1。 激活Word并打开任意一个文档
2。 选择和复制任意一段文本
3。 在Excel工作表里,使用下述四种方法之一将复制的文本进行粘贴:
* 粘贴为文本(选择编辑|粘贴)。复制的文本就会出现在活动单元格(见图9…2,单元格
A2)
* 粘贴为嵌入对象(选择编辑|选择性粘贴,点击“粘贴选项”按钮,并且在清单里选择
“Microsoft Word Document 对象”。)粘贴的文本将作为一个嵌入的对象(见图9…2,单
元格A5)。该嵌入的对象成为了目的文件的一部分。因为该嵌入的对象没有和原始数据链
接,所以该信息是静态的。当文件源中的数据改变时,该嵌入的对象不会被更新。如果要
更改嵌入的数据,你就必须双击它,这样就会打开该对象在源程序里编辑它。当然,该源
程序必须已经安装在你的电脑上了。当你嵌入对象时,所有的数据都会存储在目的文件里,
这会导致文件大小显著增大。注意,当你嵌入一个对象后,Excel的编辑栏里将显示:
=EMBED(〃Word。Document。8〃;〃〃)
* 粘贴为链接对象(选择编辑|选择性粘贴,点击“粘贴链接”选项,然后在列表里选择
“Microsoft Word Document 对象”)。虽然目的文件显示了所有的数据,但是它仅仅储存
了该数据的地址。当你双击该链接的对象时(见图9…2,单元格A9),原应用程序就会被启
动。链接对象是一种动态的操作,这意味着当源文件里的数据改变时,链接的数据就会自
动更新。因为目的文件只包含对象如何与源文件链接的信息,所以,对象链接并不会增加
目的文件的大小。下面的公式是Excel用来链接对象的:
=Word。Document。8|'C:Documents and