VBA浏览文件夹对话框调用的几种方法

   2015-06-26 0
核心提示:VBA 浏览文件夹对话框调用实现代码。大家可以根据需要选择。
1、使用API方法 
复制代码 代码如下:

'【类型声明】
Private Type BROWSEINFO
hWndOwner As Long
pIDLRoot As Long
pszDisplayName As Long
lpszTitle As Long
ulFlags As Long
lpfnCallback As Long
lParam As Long
iImage As Long
End Type
'【API声明】
Private Declare Function SHGetPathFromIDList Lib "shell32.dll" _
Alias "SHGetPathFromIDListA" (ByVal pidl As Long, _
ByVal pszPath As String) As Long
Private Declare Function SHBrowseForFolder Lib "shell32.dll" _
Alias "SHBrowseForFolderA" (lpBrowseInfo As BROWSEINFO) As Long
Private Declare Function lstrcat Lib "kernel32" _
Alias "lstrcatA" (ByVal lpString1 As String, _
ByVal lpString2 As String) As Long
Private Declare Function OleInitialize Lib "ole32.dll" _
(lp As Any) As Long
Private Declare Sub OleUninitialize Lib "ole32" ()
Private Const BIF_USENEWUI = &H40
Private Const MAX_PATH = 260
'【自定义函数】
Public Function GetFolder_API(sTitle As String, Optional vFlags As Variant) As String
Dim lpIDList As Long
Dim sBuffer As String
Dim BInfo As BROWSEINFO
If IsMissing(vFlags) Then vFlags = BIF_USENEWUI
Call OleInitialize(ByVal 0&)
With BInfo
.lpszTitle = lstrcat(sTitle, "")
.ulFlags = vFlags
End With
lpIDList = SHBrowseForFolder(BInfo)
If (lpIDList) Then
sBuffer = Space(MAX_PATH)
SHGetPathFromIDList lpIDList, sBuffer
sBuffer = Left(sBuffer, InStr(sBuffer, vbNullChar) - 1)
If sBuffer <> "" Then GetFolder_API = sBuffer
End If
Call OleUninitialize
End Function
'【使用方法】
Sub Test()
MsgBox GetFolder_API("选择文件夹")
End Sub

2、使用Shell.Application方法
复制代码 代码如下:

Sub GetFloder_Shell()
Set objShell = CreateObject("Shell.Application")
Set objFolder = objShell.BrowseForFolder(0, "选择文件夹", 0, 0)
If Not objFolder Is Nothing Then
MsgBox objFolder.self.path
End If
Set objFolder = Nothing
Set objShell = Nothing
End Sub

3、使用FileDialog方法
复制代码 代码如下:

Sub GetFloder_FileDialog()
Dim fd As FileDialog
Set fd = Application.FileDialog(msoFileDialogFolderPicker)
If fd.Show = -1 Then MsgBox fd.SelectedItems(1)
Set fd = Nothing
End Sub

以上方法在WINXP+OFFICE2003中测试通过
 
反对 0举报 0 评论 0
 

免责声明:本文仅代表作者个人观点,与乐学笔记(本网)无关。其原创性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容、文字的真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
    本网站有部分内容均转载自其它媒体,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责,若因作品内容、知识产权、版权和其他问题,请及时提供相关证明等材料并与我们留言联系,本网站将在规定时间内给予删除等相关处理.

  • 二进制文件存取示例(VB&VBA) 二进制数据文件
    ' 1. 保存文件到数据库Sub s_SaveFile()    Dim iStm As ADODB.Stream    Dim iRe As ADODB.Recordset    Dim iConcStr As String 'SQL数据库的连接字符串    iConcStr = "Provider=SQLOLEDB.1;Persist Security Info=True;"_        "Us
    02-09
  • VB类模块中属性的参数——VBA中Range对象的Value属性和Value2属性的一点区别
    VB类模块中属性的参数——VBA中Range对象的Valu
    在VB中,属性是可以有参数的,而VBA中属性使用参数非常常见。比如最常用的:Worksheet.Range("A1:A10") VB的语法,使用参数的不一定是方法,也有可能是属性!(虽然属性的本质是方法)例一:参数当作“索引”使用定义一个类模块,模块名称Ints。为简化模型,使
    02-09
  • VBA是什么?和VB有什么关系 vba和vbe
    VBA是什么---------------------------------------  直到90年代早期,使应用程序自动化还是充满挑战性的领域.对每个需要自动化的应用程序,人们不得不学习一种不同的自动化语言.例如:可以用EXCEL的宏语言来使EXCEL自动化,使用WORD BASIC使WORD自动化,等等.微
    02-09
  • Lotus Notes Send EMail from VB or VBA
    Original doc link:http://www.fabalou.com/VBandVBA/lotusnotesmail.asp你知道吗?VBA或者VB可以直接编程从发送邮件到Notes系统中,当然前提条件是在运行代码的这台机器上必须安装Notes 客户端并且完成配置.要指出的一个问题那就是所有 Lotus Notes 对象声明
    02-09
  • VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能调用的API封装库
    VBA/VB6/VBS/VB.NET/C#/Python/PowerShell都能
     API函数很强大,但是声明的时候比较繁琐。我开发的封装库,包括窗口、键盘、鼠标、消息等常用功能。用户不需要添加API函数的声明,就可以用到API的功能。在VBA、VB6的引用对话框中引用API.tlb文件,就可以用到其中的函数和方法,在VB.Net或C#项目中引用API.
    02-08
  • Inspect(VB6、VBA版)软件的下载和使用
    Inspect(VB6、VBA版)软件的下载和使用
    Inspect是进行UI Automation自动化编程的必备工具。下载地址:https://share.weiyun.com/R3QI4yfl进入该目录后,找到Inspect_VBAVB6.zip,下载到本地。   解压缩后,双击Inspect.exe启动工具。如果没有正常启动,请以管理员身份运行Regdll.exe。  左边的
    02-08
  • VBA解决Windows空当接龙的617局
    本文给大家分享的是使用VBA解决Windows空当接龙的617局的方法和思路,有需要的小伙伴可以参考下。
  • VBA将excel数据表生成JSON文件
    本文给大家汇总介绍了几种使用VBA处理EXCEL并生成JSON文件的方法和思路,非常的实用,有需要的小伙伴可以参考下。
    09-24 excelvbajson
点击排行