《excel_vba_编程教程(完整版)》

下载本书

添加书签

excel_vba_编程教程(完整版)- 第60节


按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
 “单一示例”的应用程序了,这就是说你不能同时运行一个以上的示例。Microsoft Word和 
PowerPoint就是这种单一示例的应用程序,因此,如果Word或者PowerPoint已经在运行,那么 

                                           176 

… 页面 193…

CreateObject函数就会直接引用到在运行的示例去,而不会再创建一个新的示例。  

15。使用自动控制创建一个新的 Word 文档  

我们来看看你如何将在前面章节学习到的关于绑定的知识应用到现实生活中的例子里。你也许有时 
需要从Excel直接通过程序打开一个Word文档,并且往里面写入数据,下面的例子使用了早期绑定。  
1。 在当前工程里插入新模块,并重命名为Automation  
2。 在工程浏览器里,选择当前工程,并且选择“工具”|“引用”  
3。 如果可用引用列表里的Microsoft Word 9。0 Object Library或者Microsoft Word 10。0 Object  
    Library没有被勾选,那么找到它们并勾选上,点击确定退出。  
4。 输入下面过程WriteLetter:  
    Sub WriteLetter()   
      Dim wordAppl As Word。Application   
      Application。StatusBar = 〃Creating Word Application Object。。。〃   
      Set wordAppl = CreateObject(〃Word。Application〃)   
      With wordAppl   
            。Visible = True   
           Application。StatusBar = 〃Creating a new document。。。〃  
            。Documents。Add   
            。ActiveDocument。Paragraphs(1)。Range。InsertBefore 〃Invitation〃   
           Application。StatusBar = 〃Saving document。。。〃   
            。ActiveDocument。SaveAs 〃C:Invite。doc〃   
           Application。StatusBar = 〃Exiting Word。。。〃   
            。Quit   
      End With   
      Set wordAppl = Nothing   
      Application。StatusBar = False   
    End Sub   
5。 切换到Excel应用程序窗口,并选择“工具”|“宏”|“宏”,找到过程WriteLetter并点击运行  
过程WriteLetter开始时声明对象变量为特定的对象类型(Word。Application)。回想这种生命(早 
期报道)要求你建立对Word对象库的引用(本章的前面讲过)。CreateObject函数返回的自动控制 
对象赋值到一个叫做wordAppl的对象变量,因为由子弟控制启动的应用程序不会出现在屏幕上,所 
以使用语句:  
wordAppl。Visible = True   
使启动的Word应用程序可见,这样你就可以观察VBA的工作情况。该过程里后面的语句打开一个新 
文档(Add方法),并且在第一段输入文本(InsertBefore方法),将文档保存到硬盘(SaveAs方法), 
以及关闭Word应用程序(Quit方法)。每条语句之前都有一条指令,将信息显示在Excel应用程序窗 
口下面的状态栏上。当Word应用程序关闭后,指令:  
Set wordAppl = Nothing   
清除对象变量,收回该对象占用的内存。语句:  
Application。StatusBar = False   
将状态栏上的信息恢复为默认的“就绪”。  
前面提到过,Word是单一示例(single…instance)应用程序,这意味着你不能同时运行一个以上 
的Word示例,简单说,如果你没有启动Word,WriteLetter过程里面的CreateObject函数将会启动 
Word,否则,它将会使用当前活动的Word示例。  

16。使用 GetObject 函数  

如果你确定自动控制对象以及存在并且已经打开,那么就考虑使用GetObject函数,如下所示:  
GetObject('pathname''; class')   
GetObject函数有两个参数,它们都是可选的。使用第一个参数来明确你要打开的文件名称,应该 
提供完整的文件路径。如果你忽略该参数,那么不必须明确参数class,指明要使用的对象类型, 
例如:  
                                            177 

… 页面 194…

Excel。Application   
Excel。Sheet   
Excel。Chart   
Excel。Range   
Word。Application   
Word。Document   
PowerPoint。Application   
在Invite。xls的基础上创建一个Excel对象,并且强制设置为Excel 5工作表,你可以使用下列声明:  
 ‘ late binding 后期绑定  
Dim excelObj As Object   
Set excelObj = GetObject(〃C:Invite。xls〃; Excel。Sheet。5〃)   
要设定对象变量为某个特定的Word文档的话,你可以使用:  
 ‘early binding 早期绑定  
Dim wordObj As Word。Application   
Set wordObj = GetObject(〃C:Invite。doc〃)   
如果要访问一个正在运行的Office应用程序对象,那么可以将第一个参数空出:  
Dim excelObj As Object   
Set excelObj = GetObject(; 〃Excel。Application〃)   
当你调用不带第一个参数的GetObject函数时,它就会返回一个对该应用程序示例的引用,如果该 
应用程序没有启动的话,就会产生错误。  

17。打开存在的 Word 文档  

下面的过程CenterText示范了GetObject函数的使用,访问Invite。doc文件。回想一下,该文件是 
在本章前面的过程WriteLetter里创建的。过程CenterText会将指定Word文档里的第一段居中。该 
过程使用了一个叫做DocExists的自定义函数来检查指定的文件是否存在。另外一个自定义函数 
 (IsRunning)检查Word是否已经在运行。基于上述检查结果,使用CreateObject或者GetObject 
函数。如果出现错误,那么错误编号和错误描述将会显示出来。  
Sub CenterText()   
      Dim wordDoc As Word。Document   
      Dim wordAppl As Word。Application   
      Dim mydoc As String   
      Dim myAppl As String   
      On Error GoTo ErrorHandler  
      mydoc = 〃C:Invite。doc〃   
      myAppl = 〃Word。Application〃   
      'first find out whether the specified document exists 首先查明该文档是否存在  
      If Not DocExists(mydoc) Then   
           MsgBox mydoc & 〃 does not exist。〃 & Chr(13) & Chr(13) _   
           & 〃Run the WriteLetter procedure to create 〃 & mydoc & 〃。〃   
           Exit Sub   
      End If   
      'now check if Word is running 现在检查Word是否正在运行  
      If Not IsRunning(myAppl) Then   
           MsgBox 〃Word is not running … will create a new instance of _   
           Word。 〃   
           Set wordAppl = CreateObject(〃Word。Application〃)   
           Set wordDoc = wordAppl。Documents。Open(mydoc)   
      Else   
           MsgBox 〃Word is running … will get the specified document。 〃   
           'bind the wordDoc variable to a specific Word document 将变量wordDoc绑定到 

                                           178 

… 页面 195…

           特定的Word文档  
           Set wordDoc = GetObject(mydoc)   
      End If   
      'center the 1st paragraph horizontally on page 将第一段水平居中  
      With wordDoc。Paragraphs(1)。Range   
           。ParagraphFormat。Alignment = wdAlignParagraphCenter   
      End With   
      wordDoc。Application。Quit   
      SaveChanges:=True   
      Set wordDoc = Nothing   
      Set wordAppl = Nothing   
      MsgBox 〃The document 〃 & mydoc & 〃 was reformatted。〃   
      Exit Sub   
ErrorHandler:   
      MsgBox Err。Description; vbCritical; 〃Error: 〃 & Err。Number   
End Sub   
Function DocExists(ByVal mydoc As String) As Boolean   
      On Error Resume Next   
      If Dir(mydoc) 《 》 〃〃 Then   
           DocExists = True   
      Else   
           DocExists = False   
      End If   
End Function   
Function IsRunning(ByVal myAppl As String) As Boolean   
      Dim applRef As Object   
      On Error Resume Next   
      Set applRef = GetObject(; myAppl)   
      If Err。Number = 429 Then   
           IsRunning = False   
      Else   
           IsRunning = True   
      End If   
      'clear object variable 清除对象变量内容  
      Set applRef = Nothing   
End Function   

18。使用关键字 New  

除了使用CreateObject函数来引用到其它的应用程序之外,你可以使用关键字New。关键字New告诉 
VB创建一个对象的新示例,返回到该示例的引用,以及将引用赋予该对象变量。例如,你可以按下 
面的方式使用关键字New:  
Dim objWord As Word。Application   
Set objWord = New Word。Application   
Dim objAccess As Access。Application   
Set objAccess = New Access。Application   
使用关键字New声明的对象变量总是早期绑定的。使用关键字New比使用CreateObject函数更高效。 
你每次使用关键字New的时候,VB就会创建应用程序的一个新示例。如果该应用程序以及运行,你 
就不需要打开另外一个示例,你应该使用GetObject函数。关键字New也可以用来在声明对象变量的 
时候,同时创建一个新的对象示例,例如:  
Dim objWord As New Word。Application   

                                          179 

… 页面 196…

注意,当你使用关键字New在Dim语句里声明对象变量的时候,你就不需要使用Set语句了。然而, 
不建议使用这种创建对象变量的方法,因为当该对象变量真正被创建后,你就失去对它的控制了。 
在声明中使用关键字New会导致创建对象,即使它没有被使用到。因此,如果你想要控制创建的对 
象变量,那么总是使用下述语法声明你的对象变量吧:  
Dim objWord As Word。Application   
Set objWord = New Word。Application   
Set语句可以进一步在你需要使用该对象的地方使用,接下来的章节将示范如何使用关键字New来创 
建Microsoft Outlook的新示例,并且编写你的联系地址到Excel工作表中。  

19。使用自动控制访问 Microsoft Outlook  

要从Excel直接访问Outlook的对象模型的话,首先就要建立对Microsoft Outlook 10。0或者9。0  
Object Library的引用。下面的程序例子将在Excel工作表里插入你Outlook里面的联系信息。  
Sub GetContacts()   
 
小提示:按 回车 [Enter] 键 返回书目,按 ← 键 返回上一页, 按 → 键 进入下一页。 赞一下 添加书签加入书架