特定于VBA:
是否可以要求用户通过标准Windows“浏览”选项指定目录名称,并将其作为变量读取(而不是在软件中对其进行硬编码)。
如:
String MyStr = <Inputted full path by the user via the Windows Browse Selection>
答案 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
答案 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文件扩展名的压缩文件 浏览。