excel_vba_编程教程(完整版)-第62章
按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!
图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 这是对话框的标题,如果忽略,对话框将显示标题为“打开”
在立即窗口里输入下列语句(确保在一行输入),来看看这些参数是如何使用的:
Application。GetOpenFilename(〃Excel Files(*。xls); *。xls〃);;〃Highlight the File〃
GetOpenFilename方法返回所选的或者指定的文件名称,该名称之后可以在你的VBA过程里用来打开
该文件,例如:
yourFile = Application。GetOpenFilename
?yourFile
C:EXCELMark。xls
Workbooks。Open Filename:=yourFile
在上面的例子里,文件名称被赋予变量yourFile,接下来的两条输入为询问文件名称(?yourFile)
和显示该名称(C:EXCELMark。xls)。第四条语句打开变量yourFile明确的文件。如果你通过点击
Esc键或者对话框上的取消按钮来取消对话框的话,那么GetOpenFilename方法就会返回False。
GetSaveAsFilename方法返回文件名和路径,然而,它不会自动地保存该特定的文件。输入下述指
令提供文件名称:
Application。GetSaveAsFilename (〃Plan2。xls〃)
如果你忽略文件名称的话,Excel就会显示当前活动文件的名称。当你使用GetSaveAsFilename方法
时,你可以明确文件过滤器和对话框自定义标题:
yourFile = Applica