选取文件夹目录

文章参考:j-walk.com/ss
在Excel应用程序中,可以使用GetOpenFileName方法显示一个提示文件名的对话框,但没有仅仅显示目录的对话框的方式。
这里,提供一个函数(名为GetDirectory)用来显示下面所示的对话框,返回代表所选目录的字符串。如果用户单击“取消”,则该函数返回一个空字符串。
selectdirectory
GetDirectory函数接受一个参数,该参数是可选的,代表显示在对话中的字符串。若忽略该参数,则对话框中显示“选择文件夹”字符串。
GetDirectory函数及其调用示例代码如下:

Visual Basic:
  1. Option Explicit
  2.  
  3. Public Type BROWSEINFO
  4.     hOwner As Long
  5.     pidlRoot As Long
  6.     pszDisplayName As String
  7.     lpszTitle As String
  8.     ulFlags As Long
  9.     lpfn As Long
  10.     lParam As Long
  11.     iImage As Long
  12. End Type
  13.  
  14. '32-bit API声明
  15. Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  16.   Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
  17.   As Long
  18.  
  19. Declare Function SHBrowseForFolder Lib "shell32.dll" _
  20. Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
  21.  
  22.  
  23. Sub Test()
  24.     Dim Msg As String
  25.     Msg = "请选择要备份的位置."
  26.     MsgBox GetDirectory(Msg)
  27. End Sub
  28.  
  29. Function GetDirectory(Optional Msg) As String
  30.     Dim bInfo As BROWSEINFO
  31.     Dim path As String
  32.     Dim r As Long, x As Long, pos As Integer
  33.  
  34. '   根目录文件夹=桌面
  35.     bInfo.pidlRoot = 0&
  36.  
  37. '   对话框中的标题
  38.     If IsMissing(Msg) Then
  39.         bInfo.lpszTitle = "选择文件夹"
  40.     Else
  41.         bInfo.lpszTitle = Msg
  42.     End If
  43.    
  44. '   要返回的目录类型
  45.     bInfo.ulFlags = &H1
  46.  
  47. '   显示对话框Display the dialog
  48.     x = SHBrowseForFolder(bInfo)
  49.    
  50. '   解析结果
  51.     path = Space$(512)
  52.     r = SHGetPathFromIDList(ByVal x, ByVal path)
  53.     If r Then
  54.         pos = InStr(path, Chr$(0))
  55.         GetDirectory = Left(path, pos - 1)
  56.     Else
  57.         GetDirectory = ""
  58.     End If
  59. End Function

运行test()子过程,选择目录后单击“确定”按钮,则在Msgbox消息框中将显示该目录的路径字符串。


提示:您可以在评论中使用HTML标签,且任何与HTML标签相同的符号都会被理解为HTML标签并以相应的格式显示.如果您的评论中有代码,可以使用相应的标签,例如,如果有VB或VBA代码,则可以使用[vb]标签,即[vb]放置的代码[/vb],这样会很清晰地显示代码.

留下回复