excel_vba_编程教程(完整版)-第54节
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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。
在下一章,你将学习如何通过自定义窗体从用户处收集更多的数据。
第十章 对话框和自定义窗体
在第四章,你学习了如何使用Excel内置的InputBox函数在VBA过程执行期间从用户处收集单一
数据。但是,万一你的程序在运行时需要多个数据怎么办呢?用户也许希望一次就提供所有数据,
或者从项目清单中作出所有合适的选择。如果你定程序必须收集数据的话,那么你可以:
* 使用内置对话框集合
* 创建一个自定义窗体
本章将教你如何从VBA过程里显示内置的对话框,以及从零开始设计你自己的自定义窗体。
Excel对话框
在开始创建自己的窗体之前,你应该花上一些时间学习如何利用Excel内置的对话框,这些内置对
话框本来就是为我们准备的。我讲的不是手动选择适合的选项,而是从你自己的VBA过程里调用这
些对话框。
Excel有一个特殊的内置对话框集合,它们用开头为xlDialog的常量表示,例如xlDialogClear,
xlDialogFont,xlDialogDefineName和xlDialogOptionsView。这些内置对话框是Excel对象,属于
内置Dialos集合,每个dialog对象代表一个内置对话框。
表10…1 常用的内置对话框
对话框名称 常量
新建 xlDialogNew
打开 xlDialogOpen
另存为 xlDialogSaveAs
页面设置 xlDialogPageSetup
打印 xlDialogPrint
字体 xlDialogFont
按照下述格式使用Show方法来显示对话框:
Application。Dialogs(常量)。Show
例如,下面的语句显示字体对话框:
Application。Dialogs(xlDialogFont)。Show
如果你在对象浏览器里面选择Excel库后,再输入xlDialog搜索的话,那些代表Excel内置对话框的
常量清单就会显示在对象浏览器里面了(参见图10…1)
1。 打开一个新工作簿并且保存为Chap10。xls
2。 切换到VB编辑器窗口
3。 打开立即窗口
181
… 页面 198…
4。 输入下述语句并查看结果:
Application。Dialogs(xlDialogClear)。Show
Application。Dialogs(xlDialogFont)。Show
Application。Dialogs(xlDialogFontProperties)。Show
Application。Dialogs(xlDialogDefineName)。Show
Application。Dialogs(xlDialogOptionsView)。Show
最后一句指令显示“选项”对话框的“视图”。显示内置对话框后,你可以选择合适的选项,然后
Excel就会将当前被选择的单元格,区域或者整个工作表设置相应的格式。
尽管你不能更改内置对话框的外观和行为,但是当你从你的VBA过程显示内置对话框的时候,你可
以决定它的初始设置。如果你不更改初始设置,那么VBA将显示对话框和其缺省设置。
假设你要显示清除对话框,并且所有按钮都被选择上。通常Excel显示对话框的时候,内容选项按
钮是被选择上的。在立即窗口里输入下列语句:
Application。DialogS(xlDialogClear)。Show 1
你可以在Show方法后面加上一系列的参数,在清除对话框里,“全部”选项按钮出现在四个选项按
钮组的最开头。Excel通常将可用的选项进行编号,因此,“全部”=1,“格式”=2,“内容”=3,以
及“批注”=4。在线帮助可以搜索到内置对话框的参数列表(参见图10…3)
图10…1 前缀为“xlDialog”的常量识别Excel内置对话框
在立即窗口里输入下面的语句,可以显示字体对话框,并且当前选择为“Arial”字体和14字号:
Application。Dialogs(xlDialogFont)。Show 〃Arial〃; 14
如果只要明确字号的话,那么可以在第一个参数的位置放置一个逗号就行:
Application。Dialogs(xlDialogFont)。Show ; 8
下面的指令显示“定�