excel_vba_编程教程(完整版)-第55部分
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
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 文件夹采集对话框允许用户选择一个路径,该对话框显示目录列表,并且标题显示为“浏
览”
文件对话框使用的常量列在下面的表格里,前缀“mso”表明这些常量都是Microsoft Office 对象
184
… 页面 201…
模型里一部分。
msoFileDialog常量 值
msoFileDialogOpen 1
msoFileDialogSaveAs 2
msoFileDialogFilePicker 3
msoFileDialogFolderPicker 4
可以使用FileDialog的Filters属性来控制显示文件的类型。如果你打开文件打开对话框下面的“文
件类型”下拉列表框时,你将看到许多可选择的文件过滤器。那里有24种预先设置好的文件过滤器,
你也可以在该清单里添加你自己的过滤器。在立即窗口里输入下述语句,我们就可以得到缺省的文
件过滤器数目了:
set f = Application。FileDialog(msoFileDialogOpen)。Filters
?funt
FileDialog对象的过滤器储存在FileDialogFilters集合里面。我们来创建一个简单的过程,将缺
省的文件过滤器返回到Excel工作表:
1。 在当前VBA工程里插入一个新模块,并且重命名为DialogBoxes
2。 在DialogBoxes代码窗口里输入下面显示的ListFilters过程:
Sub ListFilters()
Dim fdfs As FileDialogFilters
Dim filt As FileDialogFilter
Dim c As Integer
Set fdfs = Application。FileDialog(msoFileDialogOpen)。Filters
Sheets(3)。Cells(1; 1)。Select
Selection。Formula = 〃List of Default Filters〃
With fdfs
c = unt
For Each filt In fdfs
Selection。Offset(1; 0)。Formula = filt。Description & _
〃: 〃 & filt。Extensions
Selection。Offset(1; 0)。Select
Next
MsgBox c & 〃 filters were written to Sheet3。〃
End With
End Sub
该过程声明了两个对象变量,变量fdfs返回对FileDialog对象里的FileDialogFilters集合的引用,
而对象变量filt则储存对对象FileDialogFilter的引用。FileDialogFilters集合的Count属性返回
文件过滤器的总数。之后,过程遍历过滤器集合,并且找到每个过滤器的描述和扩展名。
使用FileDialogFilters集合的Add方法,你可以轻易地将你自己的过滤器添加到缺省的过滤器中
去。下面修改后代工程ListFilters2示范了如何将临时文件(*。tmp)过滤器添加到过滤器清单中
去。该过程里的最后语句将打开文件打开对话框,因此你自己可以检查自定义的过滤器是否已经被
添加到了文件类型下拉列表框里。
Sub ListFilters2()
Dim fdfs As FileDialogFilters
Dim filt As FileDialogFilter
Dim c As Integer
Set fdfs = Application。FileDialog(msoFileDialogOpen)。Filters
Sheets(3)。Cells(1; 1)。Select
Selection。Formula = 〃List of Default Filters〃
With fdfs
185
… 页面 202…
c = unt
For Each filt In fdfs
Selection。Offset(1; 0)。Formula = filt。Description & _
〃: 〃 & filt。Extensions
Selection。Offset(1; 0)。Select
Next
MsgBox c & 〃 filters were written to Sheet3。〃
。Add 〃Temporary Files〃; 〃*。tmp〃; 1
c = unt
MsgBox 〃There are now 〃 & c & 〃 filters。〃 & vbCrLf _
& 〃Check for yourself。〃
Application。FileDialog(msoFileDialogOpen)。Show
End With
End Sub
你可以使用FileDialogFilters集合的Clear方法清除所有预设的过滤器。修改一下上面的过程,在
添加自定义的临时文件(*。tmp)过滤器之前,清除内置的过滤器。
当你从文件打开对话框里选择一个文件时,该被选择的文件名称和路径就会被放置在
FileDialogSelectedItems集合里。使用SelectedItems属性可以返回FileDialogSelectedItems集
合。通过设定FileDialog对象的AllowMultiSelect属性为True,用户就可以同时按下Shift键或者
Ctrl键和文件名称,选择一个或多个文件。
接下来的过程示范了如何使用上面提及的属性,该过程打开一个新的工作簿并且插入一个列表框控
件。允许用户选择一个以上的文件,然后被选择的文件将加入到该列表框控件里,并且加亮第一个
文件名。
Sub ListSelectedFiles()
Dim fd As FileDialog
Dim myFile As Variant
Dim lbox As Object
Set fd = Application。FileDialog(msoFileDialogOpen)
With fd
。AllowMultiSelect = True
If 。Show Then
Workbooks。Add
Set lbox = Worksheets(1)。Shapes。 _
AddFormControl(xlListBox; _
Left:=20; Top:=60; Height:=40; Width:=300)
lboxntrolFormat。MultiSelect = xlNone
For Each myFile In 。SelectedItems
lboxntrolFormat。AddItem myFile
Next
Range(〃B4〃)。Formula = _
〃You've selected the following 〃 & _
lboxntrolFormat。ListCount & 〃 files:〃
lboxntrolFormat。ListIndex = 1
End If
End With
End Sub
186
… 页面 203…
图10…6 使用过程ListSelectedFiles(见上面)将用户选择的文件添加到工作表中列表框控件中去
注意,Show方法不会将用户所选的文件打开,它仅仅显示文件打开对话框。当用户点击“打开”按
钮时,文件名称通过SelectedItems属性从SelectedItems集合里获得。如果你希望用户点击“打开”
按钮时立即执行文件的打开操作的话,你就应该使用FileDialog对象的Execute方法。下面的过程
示范了如何立即打开用户选择的文件:
Sub OpenRightAway()
Dim fd As FileDialog
Dim myFile As Variant
Set fd = Application。FileDialog(msoFileDialogOpen)
With fd
。AllowMultiSelect = True
If 。Show Then
For Each myFile In 。SelectedItems
。Execute
Next
End If
End With
End Sub
2。GetOpenFilename 和 GetSaveAsFilename 方法
从多年以前开始,Excel就给程序员们提供了两种方便的VBA方法来显示文件另存为和文件打开对话
框:GetOpenFilename和 GetSaveAsFilename。这些方法只有在Excel里可用,并且在Excel2002里
面如果需要向后兼容的话仍然可用。
GetOpenFilename方法显示“打开”对话框,在那里你可以选择要打开的文件名称,第二个方法
(GetSaveAsFilename)则显示另存为对话框。
1。 在立即窗口输入下面的指令:
Application。GetOpenFilename
Application。GetSaveAsFilename
Application。GetSaveAsFilename (〃Plan2。xls〃)
GetOpenFilename方法从用户处获得文件名称,而不必实际打开某特定的文件。该方法有四个可选
的参数,经常使用的是第一和第三个参数,显示入下表:
187
… 页面 204…
GetOpenFilename参数 描述
fileFilter 该参数决定了对话框的文件类型(译者:原文为Save as type,有误)
下拉框了的内容。例如,要在文件类型下拉框里显示“Excel
Files(*。xls)”的话,你就应该输入下列文本作为fileFilter: “Excel
Files(*。xls); *。xls”(译者:“Excel Files; *。xls”也一样。)过
滤器的前面部分(逗号前)决定文件类型下拉框要显示的文本,第二部
分(逗号后)明确你要显示的那种类型的文件。确保你按照表格里的例
子试验一下。
title 这是对话框的标题,如果忽略,对话框将显示标题为“打