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

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

[Win10 1909文件夹背景变黑怎么办]在使用Win10 1909系统的过程中不免会出现一些奇奇怪怪的问题,近来便有一些Win10 1909系统的用户反映,文件夹背景突然变黑了。那么,Win10 19

在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

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

本文地址:https://www.docexcel.net/show/3_2698.html

以下为关联文档:

win10 1909系统文件夹背景变黑如何改成白色通常我们打开文件夹的时候,背景默认是白色的,但有用户发现更新到win10 1909系统后,却发现文件夹背景变黑色了的问题,那么win10 1909系统文件夹背景...

Win10 20H1改善磁盘清理:移除Downloads文件夹磁盘清理是所有Windows系统版本的一部分,是集成到操作系统中的工具。磁盘清理允许用户删除临时文件,陈旧的和缓存的数据以释放存储空间。Windows 10还附...

Win10专业版自定义设置文件文件夹图标技巧Win10系统如何自定义设置文件、文件夹图标?一般电脑安装上windows10系统桌面图标都是默认设置好的,使用一段时间后发现文件夹图标不好看,许多人想要自定义...

win10系统文件夹中如何批量提取文件名称当有一天,我们需要提取一个文件夹下所有文件的名称,而那个文件夹下的文件又比较多时,我们可以通过一个简单的脚本命令,即可完成工作,不需要一个一个手动复制!操作过程...

win10电脑系统文件夹拒绝访问的解决方法在我们日常使用win10系统电脑时,应该有很多用户遇到过文件夹拒绝访问的情况,那么win10系统电脑文件夹拒绝访问怎么办呢?下面小编就为大家带来win10系统电...

如何去掉win10系统文件夹右上角蓝色箭头随着win10系统的普及,多数人已经用上了win10系统,win10给了用户全新的操作体验,同时也新增各种有趣的功能。刚使用win10精简版的朋友遇到一个奇怪的...

Win10 Chromium Edge即将获取新功能:全局多媒体控件基于Chromium的Edge浏览器即将获得全局多媒体控件。用户可以通过点击地址栏上的媒体按钮进行激活,不仅会罗列出当前播放的媒体内容,而且还会显示其他所有活跃...

Temp文件夹是什么很多使用电脑的朋友会在电脑的系统盘中看到temp字眼的文件夹,其实这些基本都是系统临时文件夹,主要用于存放系统临时文件,下面小编就来跟大家说说删除temp文件夹...

WPS残留office6文件夹删不掉的解决方法在win10系统中有用户反应在卸载金山WPS办公软件之后无法将wps残留的文件夹删除,在删除的时候提似乎 操作无法完成,因为其中的文件夹或文件已在另一程序打开...

相关推荐: