调用文件打开文件夹打开vba

在编写vba代码的解决方案时,为了使解决方案更加的具有人机交互性,经常会提供各种对话框让用户进行选择。

其中选择文件或者选择文件夹对话框是最经常用到的,本文介绍几种在vba中打开选择文件和选择文件夹对话框的方法。

方法一:使用vba内置的FileDialog对象用于操作打开文件和选择文件夹对话框

vba中为我们内置了一个FileDialog对象用于操作打开文件和选择文件夹对话框。实际上,根据不同的MsoFileDialogType类型,它可以提供4种不同的对话框,具体如下:

MsoFileDialogType常量 用途

msoFileDialogFilePicker 允许用户选择一个或多个文件

msoFileDialogFolderPicker 允许用户选择文件夹路径

msoFileDialogOpen 允许用户打开一个或多个文件

msoFileDialogSaveAs 允许用户保存文件

每次都要用FileDialog对象的Show方法来打开对话框,当选择了文件或者文件夹后,选择的文件名或者文件夹的路径都将存储在FileDialogSelectedItems集合中,该集合可以用FileDialog对象的SelectedItems属性获得。

以下是一段通用的打开选择文件的对话框的vba代码:

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

            '如果单击了取消按钮则返回0

        Else

        End If

    End With

    '释放对象变量

    Set oFD = Nothing

End Function

如果要改成选择文件夹的对话框只需要将

Application.FileDialog(msoFileDialogFilePicker)改成 Application.FileDialog(msoFileDialogFolderPicker)即可。

方法二:使用Shell对象的BrowseForFolder方法打开选择文件夹对话框

它的语法如下:

Shell.BrowseForFolder( _

  ByVal Hwnd As Integer, _

  ByVal sTitle As BSTR, _

  ByVal iOptions As Integer, _

  [ ByVal vRootFolder As Variant ] _

) As FOLDER

其中Hwnd参数为拥有对话框的窗体的句柄,sTitle参数为对话框的标题,iOptions参数为对话框的一些设置,vRootFolder参数为可选参数,一般省略。

它的返回值是一个文件夹Folder对象。

代码如下:

Sub QQ1722187970()

    Dim oShell As Object

    Dim oFolder As Object

    Set oShell = VBA.CreateObject("shell.application")

    With oShell

      Set oFolder = .BrowseForFolder(0, "请选择要打开的文件夹", 0)

      With oFolder

        If Not (oFolder Is Nothing) Then

            MsgBox "你选择的是" & .Title

        Else

            MsgBox "你没有选择文件夹"

        End If

      End With

    End With

End Sub

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容