在Office VBA里用对话框选择文件夹

    在网上找了一下,大致有两种方法,第一种方法是使用Windows API 调用显示对话框。第二种方法用“Microsoft shell 控件和自动化 ”对象库。第一种方法可以在Windows的任意版本使用(win95或更晚),而第二种方法需要用户安装了Internet Explorer 5或更高版本。 不过第一种方法中,API不允许你指定开始文件夹,因此还是用了第二种方法,因为指定起始文件夹还是很有用的,而且基本现在一般PC的软件配置还是达到这个要求了的。


  • 这第二种方法首先要增加一个对象库,First you need to set a reference to the "Microsoft Shell Controls And Automation" object library.  In the VBA Editor, go to the Tools menu, choose References, and scroll down to this item and put a check next to it.
  • 然后在标准模块中添加代码如下:

Private Const BIF_RETURNONLYFSDIRS          As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN     As Long = &H2
Private Const BIF_STATUSTEXT                        As Long = &H4
Private Const BIF_RETURNFSANCESTORS      As Long = &H8
Private Const BIF_EDITBOX                               As Long = &H10 'IE4+ needed
Private Const BIF_USENEWUI                           As Long = &H40 'Win2000, WinME only
Private Const BIF_VALIDATE                           As Long = &H20 '
Private Const BIF_NONEWFOLDERBUTTON      As Long = &H200
Private Const BIF_BROWSEFORCOMPUTER     As Long = &H1000
Private Const BIF_BROWSEFORPRINTER          As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES        As Long = &H4000
Private Const MAX_PATH                                     As Long = 260


Function BrowseFolder(Optional Caption As String, _
    Optional InitialFolder As String) As String

    Dim SH As Shell32.Shell
    Dim F As Shell32.Folder

    Set SH = New Shell32.Shell
    Set F = SH.BrowseForFolder(0&, Caption, BIF_RETURNONLYFSDIRS, _
        InitialFolder)

    If Not F Is Nothing Then
        BrowseFolder = F.Items.Item.Path
    End If
End Function

  • 然后在某个Sub或者Func里调用

    Dim FName As String


    FName = BrowseFolder("Select a folder", "C:\InitialFolder")
    If FName = "" Then
        MsgBox "You didn’t select a folder"
    Else
        MsgBox "You selected: " & FName
    End If




问题:
1、 Function BrowseFolder返回的是文件夹的path,String类型,因此无法得到文件夹的时间属性,可以改进。
2、 该对话框无法从起始文件夹上溯,不知有什么参数?

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值