允许用户通过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文件扩展名的压缩文件。