2016-12-30 68 views
2

具体到VBA目录:允许用户指定通过Windows浏览选择

是否有可能让用户通过标准的Windows“浏览”选择指定一个目录名和读取,在作为一个变量(而不是在软件中对其进行硬编码)。

如:

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

是的,根据[文档](https://msdn.microsoft.com/en-us/library/office/ff836226.aspx)使用'Application.FileDialog' – OldUgly

+0

谢谢。这让我走向了正确的方向! – nas

+0

http://stackoverflow.com/a/30745070/4539709 – 0m3r

回答

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

+0

这也非常有帮助,它的工作;谢谢! – nas

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() 

请让我们知道,如果是我用下面的标志选项BIF_RETURNONLYFSDIRS有帮助的感谢

+0

这是非常有用的,它的工作;谢谢! – nas

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 

(00000001 ),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到 识别在以后的版本中添加的标志。有关更多信息,请参阅Shell和公共控件 版本。

BIF_RETURNONLYFSDIRS(00000001)

00000001。只返回文件系统目录。如果用户选择 不属于文件系统的文件夹,则OK按钮呈灰色。

注意“\ server”项目以及 “\ server \ share”和目录项目保持启用“确定”按钮。但是,如果用户选择 “\ server”项目,SHBrowseForFolder返回的PIDL传递到 SHGetPathFromIDList失败。

BIF_DONTGOBELOWDOMAIN(0x00000002)

0x00000002。请勿在域对话框的树视图控件 中包含域级别以下的网络文件夹。

BIF_STATUSTEXT(0x00000004)

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

BIF_RETURNFSANCESTORS(0x00000008)

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

BIF_EDITBOX(0x00000010)

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

BIF_VALIDATE(0x00000020)

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

BIF_NEWDIALOGSTYLE(0x00000040)

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

注意如果COM是通过CoInitializeEx的与 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。使用新的用户界面,包括一个编辑框。此 标志等同于BIF_EDITBOX | BIF_NEWDIALOGSTYLE。

注意如果COM是通过CoInitializeEx的与 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样式对话框,将对话框的根设置为打印机和传真文件夹(CSIDL_PRINTERS)。

BIF_BROWSEINCLUDEFILES(0x00004000)

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

BIF_SHAREABLE(0x00008000)

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

BIF_BROWSEFILEJUNCTIONS(0x00010000在)

0x00010000在。 Windows 7和更高版本。允许浏览文件夹连接,例如 库或带有.zip文件扩展名的压缩文件为 。

+0

..........有趣的做法.............. –

相关问题