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)

相关推荐

  • excel vba 高亮显示当前行代码

    代码: 复制代码 代码如下: Private Sub Worksheet_SelectionChange(ByVal Target As Range) ThisWorkbook.Names.Add "XM", Target End Sub 这几行代码的作用是,当选择新的单元格时,将这个单元格(或者区域)定义为名称"XM",在条件格式设置中可以引用这个名称. 如下面的附件,将代码粘贴完成后,返回工作表中,选择A4:I15,点击菜单"格式-条件格式"

  • vba 获取PPT幻灯片中的所有标题的代码

    复制代码 代码如下: Private Sub CommandButton1_Click() Me.Enabled = False getTitles Me.Enabled = True End Sub Sub getTitles() On Error Resume Next Dim oPres As Presentation Set oPres = Application.ActivePresentation Dim oSlide As Slide Dim oShape As Shape Dim

  • VBA 编程基础

    11.3.1 了解 Visual Basic 语法 本节解释最常见的语法元素. 11.3.1.1 Activate 方法的语法 语法:object.Activate 在 Activate 方法的语法中,object 是一个所提供信息的占位符,在此例中的代码会返回一个对象.例如,下面的过程会在活动的文档中激活第二个窗口. Sub MakeActive() Windows(2).Activate End Sub 11.3.1.2 MsgBox 函数的语法 语法:MsgBox(prompt[, but

  • VBA中连接SQLSERVER数据库例子

    我们在使用excel编程时,很多时候都需要使用数据库. 那么如何连接数据库然后从数据库读取数据呢? VBA 连接 SQL SERVER 数据库 实例: Dim strConn As String, strSQL As String Dim conn As ADODB.Connection Dim ds As ADODB.Recordset Dim col As Integer '连接数据库的字符串 strConn = "Provider=SQLOLEDB.1;Persist Security I

  • VBA解决Windows空当接龙的617局

    Windows的自带游戏空当接龙,其中第617局是比较难解的,需要尝试的次数比较多,而且经常忘记解法和步骤. 原本希望使用AutoIt或AutoHotkey.AAuto一类的工具,写一段自动化脚本快速解决这一局,但这些工具需要安装,而且容易被当做病毒.通过Office中的VBA调用Windows的API,对游戏窗口发送按键消息,可以快速演示解法. Declare Function FindWindow Lib "user32" Alias _ "FindWindowA&quo

  • Excel VBA连接并操作Oracle

    以下是通过Excel 的VBA连接Oracle并操作Oracle相关数据的示例Excel 通过VBA连接数据库需要安装相应的Oracle客户端工具并引用ADO的相关组件,引用ADO相关组件可按如下步骤操作: 1.打开VBA编辑器,在菜单中点选"工具","引用": 2.确保"Microsoft ActiviteX Data Objects 2.8 Library"和"Microsoft ActiviteX Data ObjectS Rec

  • 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 SHGetPathF

  • 解决Pycharm 导入其他文件夹源码的2种方法

    在pycharm中,当调用( import / from - import- )其他文件夹下的函数或模块,会发现编辑器无法识别( can not be reference),这是因为没有找到响应路径的原因,如何解决呢?? 方法1: import sys sys.path.append( ' ' ) notice: 但是,在编辑器上,还有会显示无法识别,虽然编译和运行可以通过. 而且,这些没法识别的方法无法实现超链接,没法 查看源码 方法2: File --- Setting --- Projec

  • Python判断文件或文件夹是否存在的三种方法

    常在读写文件之前,需要判断文件或目录是否存在,不然某些处理方法可能会使程序出错.所以最好在做任何操作之前,先判断文件是否存在. 这里将介绍三种判断文件或文件夹是否存在的方法,分别使用os模块.Try语句.pathlib模块. 1.使用os模块 os模块中的os.path.exists()方法用于检验文件是否存在. 判断文件是否存在 import os os.path.exists(test_file.txt) #True os.path.exists(no_exist_file.txt) #Fa

  • C# 编译生成dll文件供程序调用的两种方法

    一.使用vs2017 创建动态dll文件 方法一: 1.新建-项目-类库 2.创建一个.cs文件 写入代码,例如:建立一个Windows窗体 略丑,简单明了... using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System

  • Java文件、文件夹权限修改的两种方法

    前言 Java 修改文件权限这个应该是老生常谈的功能,但是最近发现以前写的代码有一点点安全隐患,所以把代码改成NIO的方式,下面会介绍2种修改文件,文件夹权限的方法. 使用File类 这个方式是以前最常见的方式,但是这个方式有点缺点在LINUX或者UNIX系统下,需要显示的指定权限为440,770等就显得不是那么好用了. File dirFile = new File(dirPath); dirFile.setReadable(true, false); dirFile.setExecutabl

  • VBS 显示“选择文件或文件夹”对话框的代码

    一.显示"选择文件"的对话框 问: 嗨,Scripting Guy!有没有什么方法可以让我使用脚本向用户显示一个对话框,供用户选择文件使用? 答:您好.| 如果您使用的是 Windows 2000,我们不知道实现此操作的方法,至少操作系统中没有内置这样的方法. 但如果您使用的是 Windows XP,情况就不同了.在 Windows XP 上,您可以使用"UserAccounts.CommonDialog" 对象向用户显示一个标准的"文件打开"对

  • winform 实现选择文件和选择文件夹对话框的简单实例

    实例如下: //选择文件,点击[浏览],选择文件 private void button1_Click(object sender, EventArgs e) { OpenFileDialog openFileDialog1 = new OpenFileDialog(); //显示选择文件对话框 openFileDialog1.InitialDirectory = "c:\\"; openFileDialog1.Filter = "txt files (*.txt)|*.tx

  • python 从文件夹抽取图片另存的方法

    有一个比较大的数据集需要自己处理,在分出训练集和测试集时,如果靠手动实在太麻烦,于是自己写了一段代码.(其实就是在某一路径下的子文件夹里取出符合要求的图片,放到另一个路径的对应文件夹中) from PIL import Image import os import glob def read_image(cwd,newpath): for roots,dirs,files in os.walk(cwd): print(dirs) for i in dirs: print(i) os.chdir(

  • Golang实现文件夹的创建与删除的方法详解

    目录 创建文件夹 删除文件和文件夹 小结 学习笔记,写到哪是哪. 接着上一篇对纯文本文件读写操作,主要去实现一些文件夹操作. 创建文件夹 创建文件夹的时候往往要先判断文件夹是否存在. 样例代码如下 package main import ( "bufio" "fmt" "io" "os" ) //判断文件夹是否存在 func HasDir(path string) (bool, error) { _, _err := os.S

  • c# 动态加载dll文件,并实现调用其中的简单方法

    以下是测试代码: 新建一个classlibrary,包含两个类class1和class2,这两个类中分别有一个方法,都是返回一个字符串,代码如下: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace mydll { public class Class1 { public Class1() { } public string sayhello() { ret

随机推荐