选取文件夹目录

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

Option Explicit

Public Type BROWSEINFO
    hOwner As Long
    pidlRoot As Long
    pszDisplayName As String
    lpszTitle As String
    ulFlags As Long
    lpfn As Long
    lParam As Long
    iImage As Long
End Type

'32-bit API声明
Declare Function SHGetPathFromIDList Lib "shell32.dll" _
  Alias "SHGetPathFromIDListA" (ByVal pidl As Long, ByVal pszPath As String) _
  As Long

Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long

Sub Test()
    Dim Msg As String
    Msg = "请选择要备份的位置."
    MsgBox GetDirectory(Msg)
End Sub

Function GetDirectory(Optional Msg) As String
    Dim bInfo As BROWSEINFO
    Dim path As String
    Dim r As Long, x As Long, pos As Integer
 
'   根目录文件夹=桌面
    bInfo.pidlRoot = 0&

'   对话框中的标题
    If IsMissing(Msg) Then
        bInfo.lpszTitle = "选择文件夹"
    Else
        bInfo.lpszTitle = Msg
    End If
   
'   要返回的目录类型
    bInfo.ulFlags = &H1

'   显示对话框Display the dialog
    x = SHBrowseForFolder(bInfo)
   
'   解析结果
    path = Space$(512)
    r = SHGetPathFromIDList(ByVal x, ByVal path)
    If r Then
        pos = InStr(path, Chr$(0))
        GetDirectory = Left(path, pos - 1)
    Else
        GetDirectory = ""
    End If
End Function

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


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

发表评论