【二 EXCEL VBA学习笔记:VBA弹出选择文件或文件夹的窗口】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)ElseMsgBox "未选择文件 , 程序中止"Exit subEnd IfEnd 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 ThenSet GOF = .SelectedItemsElse: Exit SubEnd IfEnd With
.SelectedItems 是个类似“字典”结构的对象,赋值给GOF(要用Set),然后再取出文件名称 。(多选的情况下,Show之后执行Execute , 会同时将选择的文件都打开 。Execute不像SelectedItems,有SelectedItems(1),它不能写成Execute(1) 。
下为Application.FileDialog 选取一个文件夹的语句:
With Application.FileDialog(msoFileDialogFolderPicker).Title = "请选择一个文件夹".InitialFileName = "E:"If .Show = -1 ThenFd = .SelectedItems(1)Else: Exit SubEnd If End With
附:FileLen(fn) fn为一个文件全路径 名称,FileLen函数得到文件大小,以“字节”为单位
FileDateTime(fn) ,FileDateTime函数得到“文件最后修改的时间”