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