在Office VBA里用对话框选择文件夹
2005-03-24 11:27
621 查看
在网上找了一下,大致有两种方法,第一种方法是使用Windows API 调用显示对话框。第二种方法用“Microsoft shell 控件和自动化 ”对象库。第一种方法可以在Windows的任意版本使用(win95或更晚),而第二种方法需要用户安装了Internet Explorer 5或更高版本。 不过第一种方法中,API不允许你指定开始文件夹,因此还是用了第二种方法,因为指定起始文件夹还是很有用的,而且基本现在一般PC的软件配置还是达到这个要求了的。
这第二种方法首先要增加一个对象库,First you need to set a reference to the "Microsoft Shell Controls And Automation" object library. In the VBA Editor, go to the Tools menu, choose References, and scroll down to this item and put a check next to it.
然后在标准模块中添加代码如下:
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_STATUSTEXT As Long = &H4
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_EDITBOX As Long = &H10 'IE4+ needed
Private Const BIF_USENEWUI As Long = &H40 'Win2000, WinME only
Private Const BIF_VALIDATE As Long = &H20 '
Private Const BIF_NONEWFOLDERBUTTON As Long = &H200
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 BrowseFolder(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
BrowseFolder = F.Items.Item.Path
End If
End Function
然后在某个Sub或者Func里调用
Dim FName As String
FName = BrowseFolder("Select a folder", "C:\InitialFolder")
If FName = "" Then
MsgBox "You didn’t select a folder"
Else
MsgBox "You selected: " & FName
End If
问题:
1、 Function BrowseFolder返回的是文件夹的path,String类型,因此无法得到文件夹的时间属性,可以改进。
2、 该对话框无法从起始文件夹上溯,不知有什么参数?
这第二种方法首先要增加一个对象库,First you need to set a reference to the "Microsoft Shell Controls And Automation" object library. In the VBA Editor, go to the Tools menu, choose References, and scroll down to this item and put a check next to it.
然后在标准模块中添加代码如下:
Private Const BIF_RETURNONLYFSDIRS As Long = &H1
Private Const BIF_DONTGOBELOWDOMAIN As Long = &H2
Private Const BIF_STATUSTEXT As Long = &H4
Private Const BIF_RETURNFSANCESTORS As Long = &H8
Private Const BIF_EDITBOX As Long = &H10 'IE4+ needed
Private Const BIF_USENEWUI As Long = &H40 'Win2000, WinME only
Private Const BIF_VALIDATE As Long = &H20 '
Private Const BIF_NONEWFOLDERBUTTON As Long = &H200
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 BrowseFolder(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
BrowseFolder = F.Items.Item.Path
End If
End Function
然后在某个Sub或者Func里调用
Dim FName As String
FName = BrowseFolder("Select a folder", "C:\InitialFolder")
If FName = "" Then
MsgBox "You didn’t select a folder"
Else
MsgBox "You selected: " & FName
End If
问题:
1、 Function BrowseFolder返回的是文件夹的path,String类型,因此无法得到文件夹的时间属性,可以改进。
2、 该对话框无法从起始文件夹上溯,不知有什么参数?
相关文章推荐
- VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹)
- EXCEL-VBA:调用打开文件夹对话框,选择路径
- VBA文件对话框的应用(VBA打开文件、VBA选择文件、VBA选择文件夹)
- MFC文件夹选择对话框
- VC弹出“选择文件夹”对话框的程序的编写
- C# winform 实现选择文件夹对话框
- 选择文件夹对话框
- JS选择文件夹对话框(实现文件夹上传) .
- VC++, MFC中实现选择文件夹,选择文件对话框,确定当前工作目录(转载)
- MFC选择文件夹对话框
- VC中选择文件和文件夹的对话框
- MFC选择文件夹对话框,选择文件路径
- 显示“选择文件夹”对话框,让用户选择文件夹
- 选择文件对话框、保存文件对话框、选择文件夹对话框
- 提供一个对话框供用户选择一个文件夹路径。
- 弹出文件夹选择对话框
- 在MFC对话框中选择文件夹
- VBA自定义函数-选择文件夹对话框
- delphi选择文件夹对话框(最简单的一种)
- 关于VC弹出选择文件夹对话框