Application.FileDialog 文件对话框 操作方法。
语法:Application.FileDialog(FileDialogType) FileDialogType 是必须的,对应的类型如下:msoFileDialogFilePicker (数字简写 3) “文件选取器”对话框;msoFileDialogFolderPicker (数字简写 4) “文件夹选取器”对话框;msoFileDialogOpen (数字简写 1) “打开”对话框;msoFileDialogSaveAs (数字简写 2) “另存为”对话框。
With Application.FileDialog(msoFileDialogFilePicker) '“文件选取器”对话框
.AllowMultiSelect = False '不可以多选
.Filters.Add "Excel Files", "*.xls,*.xlsx" '文件筛选
If .Show = -1 Then '执行Show操作,并判断是否选择了文件
GOF = .SelectedItems(1)
Else
MsgBox "未选择文件,程序中止"
Exit sub
End If
End With
(1) Filters.Add 方法。在“文件”对话框的“文件类型”下拉列表框的筛选器列表中添加一个新的文件筛选器。示例语句: .Filters.Clear ;.Filters.Add "Excel Files", "*.xls,*.xlsx"
(2) FileDialog.Title 属性。设置FileDialog 弹出窗口的标题。.Title= “请选择正确的文件或文件夹”
(3) FileDialog.AllowMultiSelect 属性。如果允许从文件对话框中选择多个文件,则为 True。说明:此属性对“文件夹选取器”对话框和“另存为”对话框无效。
(4) FileDialog.Show 方法:判断按下的是“打开”按钮 (点击的这个按钮,Show被赋值为 -1) 还是“取消”按钮 (0)。在“msoFileDialogOpen”和“msoFileDialogSaveAs”对话框中,在使用了 Show 方法后,使用 .Execute ,就会执行Open或SaveAs操作。
可以看出,只需要打开文件,用FileDialog(msoFileDialogOpen)比GetOpenFilename更简单、直接些。注:FileDialog要执行Show语句才会弹出窗口(这点不同于GetOpenFilename), Execute必须在Show执行后才会有效。
(5) FileDialog.InitialFileName 属性
设置为一个 String 类型的值,代表文件对话框中初始显示的路径或文件名。说明:在指定文件名时可以使用 '*' 和 '?' 通配符,但是指定路径时不能使用这些通配符。语句示例.InitialFileName = "E:temp网点日常运行情况概览*.xls" 弹出的对话框中将只显示“网点日常运行情况概览*”的文件,文件夹定位在E:temp。
如果指定了路径而没有指定文件名,则对话框中将显示文件筛选器所允许的所有文件。如果指定了位于初始文件夹中的某个文件,则对话框中只显示该文件。如果指定了初始文件夹中不存在的某个文件名,则对话框中将不包含文件。在 InitialFileName 属性中指定的文件类型将覆盖文件筛选器的设置。
通过InitialFileName 属性,可以控制“弹出对话框”所显示的文件夹,不用到处找需要选取的文件所在的文件夹。
下面为“多选文件”的示例语句:
Sub filedia()
With Application.FileDialog(msoFileDialogOpen)
.Title = "请选择文件"
.AllowMultiSelect = True
.InitialFileName = "E:temp"
.Filters.Add "Excel Files", "*.xls,*.xlsx"
If .Show = True Then
Set GOF = .SelectedItems
Else: Exit Sub
End If
End With
.SelectedItems 是个类似“字典”结构的对象,赋值给GOF(要用Set),然后再取出文件名称。(多选的情况下,Show之后执行Execute,会同时将选择的文件都打开。Execute不像SelectedItems,有SelectedItems(1),它不能写成Execute(1)。
下为Application.FileDialog 选取一个文件夹的语句:
With Application.FileDialog(msoFileDialogFolderPicker)
.Title = "请选择一个文件夹"
.InitialFileName = "E:"
If .Show = -1 Then
Fd = .SelectedItems(1)
Else: Exit Sub
End If
End With
附:FileLen(fn) fn为一个文件全路径+名称,FileLen函数得到文件大小,以“字节”为单位
FileDateTime(fn) ,FileDateTime函数得到“文件最后修改的时间”