您的位置: 首页 > EXCEL技巧 > ExcelVBA >

在VBA中获取浏览文件夹对话框

时间:2013-12-04 整理:docExcel.net

在VBA中可以用Application对象的GetOpenFilename方法来调用打开文件对话框,但Excel却没有提供浏览文件夹的方法。我们可以用下面的两种方法来调用浏览文件夹对话框。

方法一:用Windows API 函数,在标准模块中自定义一个函数BrowseFolderA,然后在过程中调用:

Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const MAX_PATH As Long = 260

Type BrowseInfo
hOwner As Long
pidlRoot As Long
pszDisplayName As String
lpszINSTRUCTIONS As String
ulFlags As Long
lpfn As Long
lParam As Long
iImage As Long
End Type

Type SHFILEOPSTRUCT
hwnd As Long
wFunc As Long
pFrom As String
pTo As String
fFlags As Integer
fAnyOperationsAborted As Boolean
hNameMappings As Long
lpszProgressTitle As String
End Type

Declare Function SHGetPathFromIDListA Lib \"shell32.dll\" ( _
ByVal pidl As Long, _
ByVal pszBuffer As String) As Long

Declare Function SHBrowseForFolderA Lib \"shell32.dll\" ( _
lpBrowseInfo As BrowseInfo) As Long
Function BrowseFolderA(Optional Caption As String = \"\") As String

Dim BrowseInfo As BrowseInfo
Dim FolderName As String
Dim ID As Long
Dim Res As Long

With BrowseInfo
   .hOwner = 0
   .pidlRoot = 0
   .pszDisplayName = String$(MAX_PATH, vbNullChar)
   .lpszINSTRUCTIONS = Caption
   .ulFlags = BIF_RETURNONLYFSDIRS
   .lpfn = 0
End With

FolderName = String$(MAX_PATH, vbNullChar)
ID = SHBrowseForFolderA(BrowseInfo)
If ID Then
   Res = SHGetPathFromIDListA(ID, FolderName)
   If Res Then
BrowseFolderA = Left$(FolderName, InStr(FolderName, vbNullChar) - 1)
   End If
End If

End Function

下面是调用BrowseFolderA函数的代码示例:

Sub BrowseFolder_A()
Dim FName As String
FName = BrowseFolderA(Caption:=\"选择一个文件夹\")
If FName = vbNullString Then
Debug.Print \"没有选择文件夹\"
Else
Debug.Print \"选择的文件夹是: \" & FName
End If
End Sub

 

方法二:用Shell控件库。在使用这个方法前,必需在VBA中调用“Microsoft Shell Controls And Automation”库,方法是在VBA编辑器中单击菜单“工具→引用”,在“引用”窗口中选择“Microsoft Shell Controls And Automation”,单击“确定”。

 

然后,将下面的代码输入到标准模块中。

Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_BROWSEFORCOMPUTER As Long = &H1000
Private Const BIF_BROWSEFORPRINTER As Long = &H2000
Private Const BIF_BROWSEINCLUDEFILES As Long = &H4000
Private Const MAX_PATH As Long = 260

Function BrowseFolderB(Optional Caption As String, _
Optional InitialFolder As String) As String

Dim SH As Shell32.Shell
Dim F As Shell32.Folder

Set SH = New Shell32.Shell
Set F = SH.BrowseForFolder(0&, Caption, BIF_RETURNONLYFSDIRS, InitialFolder)
If Not F Is Nothing Then
BrowseFolderB = F.Items.Item.Path
End If

End Function

最后,用类似下面的代码进行调用:

Sub BrowseFolder_B()
Dim FName As String
FName = BrowseFolderB(Caption:=\"选择一个文件夹\", InitialFolder:=\"\")
If FName = vbNullString Then
   Debug.Print \"没有选择文件夹\"
Else
   Debug.Print \"选择的文件夹是: \" & FName
End If
End Sub

 

可以看到,这种方法调用的浏览文件夹对话框中多了一个“新建文件夹”按钮,并且可以拖动窗口的右下角来调整对话框的大小。

在VBA中获取浏览文件夹对话框 问题:在VBA中获取浏览文件夹对话框
回答:...A中可以用Application对象的GetOpenFilename方法来调用打开文件对话,但Excel却没有提供浏览文件的方法。我们可以用下面的两种方法来调用浏览文件对话。 方法一:用Windows API 函数,在标准模块中自定义一个函数BrowseFolderA...
《Excel VBA实战精炼》 问题:《Excel VBA实战精炼》
回答:42 打开事情簿时不显示更新链接对话 71 附录B Excel事情表函数参考 554 245 捕捉包括公式的单位格的值改变 465 135 加载宏中事情表的妙用 199 157 规复Excel的菜单和东西栏 245 147 获取用户选定文件文件名 218 76 在VBA中利用数组公式...
十二则 Excel操纵效率大大 问题:十二则 Excel操纵效率大大
回答:...(2)选择“文件”菜单中“另存为”呼吁,打开“另存为”对话; 二:用鼠标从“我的电脑”中将Excel应用措施拖到桌面上,然后从快捷菜单中选择“在当前位置建设快捷”以建设它的快捷,启动时只需双击其快捷即可。 (2)打...
用VBA获取系统特殊文件夹路径 问题:用VBA获取系统特殊文件夹路径
回答:Windows 特殊文件,包括 Desktop 文件、 MyDocuments 文件等,如果我们要在VBA中用到这些文件,可以用下列代码来获取这些特殊文件的路径。 Option Explicit Sub GetMyDocumentsPath()   Dim WSHShell As Object   Set WSHShell = CreateObject(...
如何将PPT幻灯片中的图片提取出来 问题:如何将PPT幻灯片中的图片提取出来
回答:...的图片,选择“另存为图片”,在弹出的保存类型对话中选择要保存的图片格式,最后点击“保存”按钮就可以了。 方法二、获取没修改的演示文稿图片 有些图片被插入到PPT中后,为了适应页面尺寸,会进...
在Office Word 2003中添加自己常用文件夹位置 问题:在Office Word 2003中添加自己常用文件夹位置
回答:...存为)时,会发现在“打开”或“另存为”对话的左侧有桌面、我的文档、我的电脑等文件,如果能把我们自己常用的文件也添加到它们之中,显然会更方便了。怎么实现? 1、启动Word或Excel,单击菜单栏&ldqu...
相关推荐: