友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
飞读中文网 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

excel_vba_编程教程(完整版)-第69章

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



过程使用了一个叫做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()   
     Dim objOut As Outlook。Application   
     Dim objNspc As NameSpace   
     Dim objItem As ContactItem   
     Dim Headings As Variant   
     Dim i As Integer ' array element 数组成员  
     Dim r As Integer ' row index 行号  
     r = 2   
     Set objOut = New Outlook。Application   
     Set objNspc = objOut。GetNamespace(〃MAPI〃)   
     Headings = Array(〃Full Name〃; 〃Street〃; 〃City〃; _   
           〃State〃; 〃Zip Code〃; 〃E…Mail〃)  
     Sheets(1)。Activate   
     For Each cell In Range(〃A1:F1〃)   
           cell。FormulaR1C1 = Headings(i)   
           i = i + 1   
     Next   
     For Each objItem In objNspc。GetDefaultFolder _   
           (olFolderContacts)。Items   
           With ActiveSheet 。Cells(r; 1)。Value = objItem。FullName   
                。Cells(r; 2)。Value = objItem。BusinessAddress   
                。Cells(r; 3)。Value = objItem。BusinessAddressCity   
                。Cells(r; 4)。Value = objItem。BusinessAddressState  
                。Cells(r; 5)。Value = objItem。BusinessAddressPostalCode   
                。Cells(r; 6)。Value = objItem。Email1Address   
           End With   
           r = r + 1   
     Next objItem   
     Set objItem = Nothing   
     Set objNspc = Nothing   
     Set objOut = Nothing   
End Sub   
过程GetContacts开始声明一个叫做objOut的对象变量来存储到Outlook应用程序的引用,该变量定 
义为明确的对象类型(Outlook。Application),因此VBA使用早期绑定。  
注意在该过程里,我们使用关键字New(在前面部分由讨论)来创建一个新的Outlook应用程序对象 
示例,返回引用到该示例,并且将该引用赋予声明的变量objOut。  
为了访问Outlook里的联系项目,你也需要声明对象变量来引用Outlook的NameSpace和 
ContactItem。NameSpace对象代表了储存为MAPI(信息应用程序编程界面)的信息。NameSpace对 

                                         180 

… 页面 197…

象包含了文件夹(联系地址,日志,任务,等等),每个文件夹由一次有它们的项目。一个项目是 
Outlook的一个详细数据,例如邮件信息,或者联系地址。  
使用For…Each…Next循环在工作表里写入列标题之后,过程使用另外一个For…Each…Next循环来 
遍历联系地址文件夹中的项目。GetDefaultFolde方法返回一个联系地址文件夹的对象变量,该方 
法有一个参数,该常量代表了你要访问的文件夹。当所有的联系地址都被写入Excel工作表后,该 
过程释放所有对象变量,将它们设定为Nothing。  
注意,当你运行过程GetContacts时,你可能会看到一个警告信息,告诉你程序试图访问电子邮件 
地址,点击确定允许操作。  

20。接下来……  

在本章,你学习了如何从VBA程序里启动、激活和控制其它应用程序(Word和Outlook)。你学习了 
如何使用SendKeys方法发送按键到另一个应用程序。你也学习了如何手动和编程地添加链接和嵌入 
对象。最后,你使用自动控制从Excel里创建新的Word文档,以及后来访问该文档并设置一些格式。 
你也学习了如何从Outlook里获取联系地址并放置到Excel工作表中。你使用两个新函数 
CreateObject和GetObject扩展了你的VBA知识。你也学习了如何以及何时使用关键字New。请在第 
十五章里学习如何从Excel里控制Microsoft Access。  
在下一章,你将学习如何通过自定义窗体从用户处收集更多的数据。  

                               第十章 对话框和自定义窗体  

    在第四
返回目录 上一页 下一页 回到顶部 1 1
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!