允许用户通过Windows浏览选择指定目录

时间:2016-12-30 01:11:47

标签: excel vba excel-vba

特定于VBA:

是否可以要求用户通过标准Windows“浏览”选项指定目录名称,并将其作为变量读取(而不是在软件中对其进行硬编码)。

如:

String MyStr = <Inputted full path by the user via the Windows Browse Selection>

3 个答案:

答案 0 :(得分:3)

以下是一个可用于允许用户浏览文件夹的功能:

Public Function pickFolder() As String

    Dim strSelectedItem As String

    Dim dlgPickFolder As FileDialog
    Set dlgPickFolder = Application.FileDialog(msoFileDialogFolderPicker)

    With dlgPickFolder
        .AllowMultiSelect = False
    End With

    If dlgPickFolder.Show = -1 Then
        strSelectedItem = dlgPickFolder.SelectedItems(1) & "\"
    Else
    strSelectedItem = ""
    Set fd = Nothing
    End If
    Set fd = Nothing

pickFolder = strSelectedItem

End Function

您只需使用此功能设置所需变量的值即可使用它:

Dim sFolder As String
sFolder = pickFolder()

请告诉我们是否有帮助谢谢

答案 1 :(得分:2)

代码如:

Sub MAIN()
    Dim folder As String
    folder = GetFolder
End Sub

Function GetFolder() As String
    Dim fldr As FileDialog
    Dim sItem As String
    Set fldr = Application.FileDialog(msoFileDialogFolderPicker)
    With fldr
        .Title = "Select a Folder"
        .AllowMultiSelect = False
        .InitialFileName = Application.DefaultFilePath
        If .Show <> -1 Then GoTo NextCode
        sItem = .SelectedItems(1)
    End With
NextCode:
    GetFolder = sItem
    Set fldr = Nothing
End Function

enter image description here

答案 2 :(得分:2)

Set bffShell = CreateObject("Shell.Application")
Set bff = bffShell.BrowseForFolder(0, "Select the My Documents folder", &h4049)
If Err.number<>0 Then
        MsgBox "Error Setting up Browse for Folder"
    Else
        A = bff.ParentFolder.ParseName(bff.Title).Path
        If err.number=424 then err.clear
                Msgbox A
End If

我使用了以下标志选项BIF_RETURNONLYFSDIRS(0x00000001),BIF_RETURNFSANCESTORS(0x00000008),BIF_NEWDIALOGSTYLE(0x00000040)和BIF_BROWSEINCLUDEFILES(0x00004000)。

这些是来自MSDN https://msdn.microsoft.com/en-us/library/windows/desktop/bb773205(v=vs.85).aspx

的标记选项
  

ulFlags类型:UINT

     

指定对话框选项的标志。这个成员可以   0或以下值的组合。版本号参考   SHBrowseForFolder所需的最低版本的Shell32.dll   识别后续版本中添加的标志。请参见壳牌和通用控件   更多信息的版本。

     

BIF_RETURNONLYFSDIRS(0x00000001)

     

00000001。仅返回文件系统目录。如果用户选择   不属于文件系统的文件夹,“确定”按钮显示为灰色。

     

注意确定按钮仍然为&#34; \ server&#34;物品,以及   &#34; \服务器\共享&#34;和目录项。但是,如果用户选择了   &#34; \服务器&#34; item,将SHBrowseForFolder返回的PIDL传递给   SHGetPathFromIDList失败。

     

BIF_DONTGOBELOWDOMAIN(0x00000002)

     

0x00000002。不要在域级别下包含网络文件夹   对话框的树视图控件。

     

BIF_STATUSTEXT(0x00000004)

     

0x00000004。在对话框中包含状态区域。回调   function可以通过向对话框发送消息来设置状态文本   框。

指定BIF_NEWDIALOGSTYLE时不支持此标志。

     

BIF_RETURNFSANCESTORS(0x00000008)

     

0x00000008。只返回文件系统的祖先。祖先是一个   位于命名空间层次结构中根文件夹下的子文件夹。   如果用户选择不属于的根文件夹的祖先   在文件系统中,OK按钮显示为灰色。

     

BIF_EDITBOX(0x00000010)

     

0x00000010。版本4.71。在浏览对话框中包含编辑控件   允许用户键入项目名称的框。

     

BIF_VALIDATE(0x00000020)

     

0x00000020。版本4.71。如果用户在中键入了无效的名称   编辑框,浏览对话框调用应用程序   BrowseCallbackProc,带有BFFM_VALIDATEFAILED消息。这个标志是   如果未指定BIF_EDITBOX,则忽略。

     

BIF_NEWDIALOGSTYLE(0x00000040)

     

0x00000040。 5.0版。使用新的用户界面。设置此标志   为用户提供了一个可以调整大小的更大的对话框。该   对话框有几个新功能,包括:拖放   对话框中的功能,重新排序,快捷菜单,新功能   文件夹,删除和其他快捷菜单命令。

     

注意如果使用CoInitializeEx初始化COM   COINIT_MULTITHREADED标志设置,如果SHBrowseForFolder失败   传递BIF_NEWDIALOGSTYLE。

     

BIF_BROWSEINCLUDEURLS(0x00000080)

     

0x00000080。 5.0版。浏览对话框可以显示URL。该   还必须设置BIF_USENEWUI和BIF_BROWSEINCLUDEFILES标志。如果有的话   如果未设置这三个标志,则浏览器对话框会拒绝URL。   即使设置了这些标志,浏览对话框也会显示URL   仅当包含所选项目的文件夹支持URL时。什么时候   调用文件夹的IShellFolder :: GetAttributesOf方法来请求   在所选项目的属性中,该文件夹必须设置SFGAO_FOLDER   属性标志。否则,浏览对话框将不会显示   URL。

     

BIF_USENEWUI

     

5.0版。使用新用户界面,包括编辑框。这个   flag等同于BIF_EDITBOX | BIF_NEWDIALOGSTYLE。

     

注意如果使用CoInitializeEx初始化COM   COINIT_MULTITHREADED标志设置,如果BIF_USENEWUI,SHBrowseForFolder将失败   通过了。

     

BIF_UAHINT(0x00000100)

     

0x00000100。版本6.0。与BIF_NEWDIALOGSTYLE结合使用时,添加一个   用法提示对话框,代替编辑框。 BIF_EDITBOX   覆盖这个标志。

     

BIF_NONEWFOLDERBUTTON(0x00000200)

     

0x00000200。版本6.0。不要在中包含“新建文件夹”按钮   浏览对话框。

     

BIF_NOTRANSLATETARGETS(0x00000400)

     

0x00000400时。版本6.0。当所选项目是快捷方式时,返回   快捷方式本身的PIDL而不是其目标。

     

BIF_BROWSEFORCOMPUTER(0x00001000)

     

0x00001000。只返回电脑。如果用户选择其他任何内容   与计算机相比,“确定”按钮显示为灰色。

     

BIF_BROWSEFORPRINTER(0x00002000)

     

0x00002000。只允许选择打印机。如果用户选择   除打印机以外的任何其他设置,OK按钮都是灰色的。

     

在Windows XP及更高版本的系统中,最佳做法是使用Windows   XP风格的对话框,将对话框的根目录设置为打印机和   传真文件夹(CSIDL_PRINTERS)。

     

BIF_BROWSEINCLUDEFILES(0x00004000)

     

0x00004000。版本4.71。浏览对话框也显示文件   作为文件夹。

     

BIF_SHAREABLE(0x00008000)

     

0x00008000。 5.0版。浏览对话框可以显示共享   远程系统上的资源。这适用于那些应用程序   想要在本地系统上公开远程共享。 BIF_NEWDIALOGSTYLE   还必须设置标志。

     

BIF_BROWSEFILEJUNCTIONS(0x00010000)

     

0x00010000在。 Windows 7及更高版本。允许文件夹联结,例如   库或具有.zip文件扩展名的压缩文件   浏览。