靠谱电子书 > 经管其他电子书 > excel_vba_编程教程(完整版) >

第52部分

excel_vba_编程教程(完整版)-第52部分

小说: excel_vba_编程教程(完整版) 字数: 每页4000字

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!



  
技巧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              Settingstj8147My  
         DocumentsTigerVBExcel2002_ProgrammingChineseExcel2002VBA_Ch9。doc'!'!OLE_ 
         LINK2'(译者:由于文件存储位置不同,本节的翻译可能和你的情况不一样,请注意分辨)  
    *      粘贴为超链接(选择粘贴|超链接译者:应该为“编辑”|“粘贴为超链接”)粘贴的数 
         据在工作表里显示为带下划线、有颜色的文本(见图9…2,单元格A11)。点击该超链接, 
         你可以快速地激活该源文件。  

                                             172 

… 页面 189…

                                                                                                
图9…2 示范链接和嵌入  

7。使用 VBA 进行链接和嵌入  

过程InsertLetter示范了如何使用程序在Excel嵌入一个Word文档。用你自己的文件名称代替引用 
 “C:Hello。doc”。过程InsertLetter使用AddOLEObject方法,该方法创建一个OLE对象,并且返回 
一个对表该新OLE对象的Shape对象。在VB在线帮助里面,你可以找到AddOLEObject方法可用的其它 
参数。  
1。 在当前工程里面插入一新模块,并重命名为OLE  
2。 输入过程InsertLetter,如下所示:  
Sub InsertLetter()   
      Workbooks。Add   
      ActiveSheet。Shapes。AddOLEObject FileName:=〃C:Hello。doc〃   
End Sub   
上面的过程打开一个新工作簿,然后嵌入该指定的Word文档。要链接一个文档的话,你就必须明确 
另外一个参数Link,如下所示:  
ActiveSheet。Shapes。AddOLEObject _   
FileName:=〃C:Hello。doc〃; Link:=True   
技巧9…4 对象链接和嵌入  
当你不得不做出决定是否使用嵌入还是链接对象时,只要有下列之一的条件,那么就使用嵌入:  
*          你不在乎文档大小,或者你有足够的硬盘空间和内存来处理大文件  
*          你再也不会在其它复合文档里使用源文件或者源文本  
*          你想要将该文档通过电子邮件或者磁盘发送给别人,并且确保他们能够顺利地读取数 
      据。  
 (译者:本人也倾向于使用嵌入,因为链接经常会问你是否要更新链接,而且,很多人经常会忘记 
发送源文件给别人。)  

                                           173 

… 页面 190…

8 和自动控制  

在自动控制后面的驱动力量是组件对象模型(),它决定了服务器应用程序创建对象的规则,也 
明确服务器和控制应用程序在使用这些对象时必须遵循的方法。标准包含作为自动控制界面 
 (Automation interfaces)可用的函数集合。  
当服务器应用程序创建一个对象是,它会自动地制作一个和它一起可用的界面。该界面包括该对象 
可识别的属性、方法和事件。控制应用程序不需要为了控制该对象去了解它的内部结构,只需要知 
道如何操作服务器应用程序制作的对象界面。  

9。了解绑定  

对于控制应用程序与自动控制对象(服务器)来说,你必须将你的VBA过程中可用的对象和服务器 
实际的自动控制对象联系起来,这个过程就叫做绑定。这里有两种类型的绑定:后期绑定和早期绑 
定。你对绑定的选择对你的应用程序表现影响很大。  

10。后期绑定  

当你声明一个变量 As Object 或者As Vaiant时,VB使用的是后期绑定。后期绑定也叫运行绑定。 
简单地说,后期绑定意味着VB在设计时不会将你的对象变量和自动控制对象联系起来,而是要等到 
你实际运行该过程时才联系起来。因为As Object或者As Variant的声明在本质上是非常普通的, 
所以,VB在汇编时不能决定你变量指向的对象真正具有你的VBA过程使用的属性和方法。  
下面的声明导致对指定对象的后期绑定:  
Dim mydoc As Object   
后期绑定的优势是所有的自动控制对象都知道如何使用。  
后期绑定的劣势是对内置常量不支持。因为在设计时,VB并不知道你的对象指向的类型库,所以, 
你必须通过在应用程序文档里查询数值在你的代码里定义常量。同样,在运行时询问应用程序将放 
慢你程序的执行。  
注意:后期绑定使得在另外一个应用程序的类型库里访问对象称为可能,而不需要首先建立对该对 
象库的引用。如果你不肯定你的用户是否在他们的机子上安装了要指向的类型库,那么就使用后期 
绑定。  
下面的过程示范如何使用后期绑定来打印Word文档。  
Sub PrintWordDoc()   
      Dim objWord As Object   
      Set objWord = CreateObject(〃Word。Application〃)   
     With objWord   
           。Visible = True   
           。Documents。Open 〃C:Hello。doc〃   
           。Options。PrintBackground = False   
           。ActiveDocument。PrintOut   
      End With   
      objWord。Documents。Close   
      objWord。Quit   
      Set objWord = Nothing   
End Sub   
技巧9…5 这是什么类型的绑定?  
无论何时你使用常用的Object或Variant数据类型声明对象变量,请考虑后期绑定。后期绑定和早 
期绑定的主要区别是你如何声明你对象

返回目录 上一页 下一页 回到顶部 0 0

你可能喜欢的