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
下面的指令显示“定义名称”对话框,并且在工作簿中的“名称”文本框中输入“John”,“引用位
置”里引用到单元格A1:
Application。Dialogs(xlDialogDefineName)。Show 〃John〃; 〃=A1〃
如果你点击确定Show方法就返回True,点击取消则为False。
182
… 页面 199…
图10…2 以常量xlDialogOptionsView代表的“选项”对话框“视图”的可用设置
图10…3 Excel内置对话框参数列表
1。文件打开和另存为对话框
OfficeXP中一个新而功能强大的对象是FileDialog。该对象允许你从你的VBA过程里显示文件打开
和文件另存为对话框。因为FileDialog对象是Microsoft Office 10。0 Object Library的一部分,
183
… 页面 200…
所以它在所有的Office XP应用程序里都是可用的。在前期的Excel版本中,程序员使用了两种特殊
的方法来显示文件打开和文件另存对话框,这些方法(GetOpenFilename和GetSaveAsFilename)将
在本章后面解释。要在你的VBA过程里面使用新的FileDialog对象来显示文件打开对话框的话,你
可以输入下列语句:
Application。FileDialog(msoFileDialogOpen)。Show
要显示文件另存对话框的话,则使用下面的语句:
Application。FileDialog(msoFileDialogSaveAs)。Show
现在,我们在立即窗口里输入上面的语句来看看文件打开和文件另存对话框。
除了文件打开和文件另存为对话框之外,FileDialog对象也能够显示“浏览”对话框,列出文件和
文件夹(参见图10…4),或者文件夹(图10…5):
‘ browse the list of files and folders 浏览文件和文件夹清单
Application。FileDialog(msoFileDialogFilePicker)。Show
图10…4 文件采集对话框允许用户选择一个或多个文件,该对话框显示文件和文件夹列表,并且标
题显示为“浏览”
‘ browse the list of folders 浏览文件夹清单
Application。FileDialog(msoFileDialogFolderPicker)。Show
图10…5 文件夹采集对话框允许用户选择一