允许用户通过Windows Browse Selection指定一个目录

具体到VBA:

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

如:

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

以下是您可以用来允许用户浏览文件夹的function:

 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 

你可以简单地通过使用这个函数设置你想要的variables的值来使用它:

 Dim sFolder As String sFolder = pickFolder() 

请让我们知道如果有帮助谢谢

代码如:

 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 

在这里输入图像描述

 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

ulFlagstypes:UINT

指定对话框选项的标志。 该成员可以是0或以下值的组合。 版本号是指SHBrowseForFolder识别稍后版本中添加的标志所需的Shell32.dll的最低版本。 有关更多信息,请参阅Shell和公共控件版本。

BIF_RETURNONLYFSDIRS(0x00000001)

00000001。 只返回文件系统目录。 如果用户select不属于文件系统的文件夹,则“确定”button呈灰色。

注意OKbutton保持为“\ server”项目以及“\ server \ share”和目录项目启用。 但是,如果用户select“\ server”项,SHBrowseForFolder返回的PIDL传递给SHGetPathFromIDList失败。

BIF_DONTGOBELOWDOMAIN(0x00000002)

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

BIF_STATUSTEXT(0x00000004)

0x00000004。 在对话框中包含一个状态区域。 callback函数可以通过发送消息到对话框来设置状态文本。 指定BIF_NEWDIALOGSTYLE时不支持此标志。

BIF_RETURNFSANCESTORS(0x00000008)

0x00000008。 只返回文件系统的祖先。 祖先是名称空间层次结构中根文件夹下的子文件夹。 如果用户select不属于文件系统的根文件夹的祖先,则“确定”button呈灰色。

BIF_EDITBOX(0x00000010)

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

BIF_VALIDATE(0x00000020)

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

BIF_NEWDIALOGSTYLE(0x00000040)

0x00000040。 版本5.0。 使用新的用户界面。 设置这个标志为用户提供了一个更大的对话框,可以resize。 对话框有几个新function,包括对话框中的拖放function,重新sorting,快捷菜单,新文件夹,删除和其他快捷菜单命令。

注意如果COM通过设置了COINIT_MULTITHREADED标志的CoInitializeEx进行初始化,则在传递BIF_NEWDIALOGSTYLE时,SHBrowseForFolder会失败。

BIF_BROWSEINCLUDEURLS(0x00000080)

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

BIF_USENEWUI

版本5.0。 使用新的用户界面,包括一个编辑框。 这个标志相当于BIF_EDITBOX | BIF_NEWDIALOGSTYLE。

注意如果通过设置COINIT_MULTITHREADED标志通过CoInitializeEx初始化COM,如果BIF_USENEWUI传递SHBrowseForFolder失败。

BIF_UAHINT(0x00000100)

0x00000100。 版本6.0。 与BIF_NEWDIALOGSTYLE结合使用时,会在对话框中添加使用提示,以代替编辑框。 BIF_EDITBOX覆盖此标志。

BIF_NONEWFOLDERBUTTON(0x00000200)

0x00000200。 版本6.0。 不要在浏览对话框中包含新build文件夹button。

BIF_NOTRANSLATETARGETS(0x00000400)

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

BIF_BROWSEFORCOMPUTER(0x00001000)

0x00001000。 只返回电脑。 如果用户select除计算机以外的其他任何东西,则“确定”button呈灰色。

BIF_BROWSEFORPRINTER(0x00002000)

0x00002000。 只允许select打印机。 如果用户select除打印机以外的其他任何内容,则OKbutton呈灰色。

在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文件扩展名的压缩文件。