如何在vba中用FileDialog打开选择文件对话框时筛选过滤文件?

如何用vba打开选择文件和选择文件夹对话框? 一文中我们介绍了使用vba内置的FileDialog对象用于操作打开文件和选择文件夹对话框。

当用 Application.FileDialog(msoFileDialogFilePicker) 弹出选择文件对话框时,默认会显示所有文件。

我们经常需要只显示某类文件,比如只显示excel 文件或者只显示word 文件。

这时候可以使用FileDialog对象的Filters属性添加一个FileDialogFilters集合对象,把要筛选的文件模式写入。

使用FileDialogFilters集合对象的Add方法添加要筛选的文件,它的语法如下:

expression .Add(Description, Extensions, Position)

其中Description参数为要筛选的文件的描述字符,比如”Excel 文件”,Extensions参数为要筛选的文件夹的扩展名,这里可以使用?和*作为通配符,比如”*.xls*”。当要显示多个文件的扩展名时,可以使用;分隔,比如”*.xls*;*.doc*”。

Position参数为要显示在筛选下拉列表框中的位置。

以下是一个示例代码,打开可以只选择excel文件或者word文件的文件选择对话框:

Function GetPath() As String
    '声明一个FileDialog对象变量
    Dim oFD As FileDialog
    Dim oFDFilter As FileDialogFilters
'    '创建一个选择文件对话框
    Set oFD = Application.FileDialog(msoFileDialogFilePicker)
    '创建一个选择文件夹对话框
'    Set oFD = Application.FileDialog(msoFileDialogFolderPicker)
    '声明一个变量用来存储选择的文件名
    Dim vrtSelectedItem As Variant
    With oFD
        .Filters.Clear
        .Filters.Add "Excel文件", "*.xls*", 1
        .Filters.Add "Word文件", "*.doc*", 2
        '允许选择多个文件
        .AllowMultiSelect = True
        '使用Show方法显示对话框,如果单击了确定按钮则返回-1。
        If .Show = -1 Then
            '遍历所有选择的文件
            For Each vrtSelectedItem In .SelectedItems
                '获取所有选择的文件的完整路径,用于各种操作
                GetPath = vrtSelectedItem
            Next这时候可以使用FileDialog对象的Filters属性添加一个FileDialogFilters集合对象,把要筛选的
            '如果单击了取消按钮则返回0
        Else
        End If
    End With
    '释放对象变量
    Set oFD = Nothing
End Function

 

       

发表评论