当前位置: 首页 > ds >正文

【VBA 中GetOpenFilename】常用友好的人机交互文件全路径选择模式

程序运行过程中,获取某个或者多个文件目录全路径是常见的场景,VBA 提供了一种了方法在人机友好交互性方面作用显著。下面总结下 GetOpenFilename 方法的使用技巧。

方法调用
Sub display()Rem 调用方法和显示效果
pathFiles = Application.GetOpenFilename(filefilter:="Excel 文件 (*.xl*),*.xl*", MultiSelect:=True)End Sub
交互效果

在这里插入图片描述

函数原型和参数说明
函数原型
Application.GetOpenFilename( _[FileFilter], _[FilterIndex], _[Title], _[ButtonText], _[MultiSelect] _
)
参数说明
参数名称说明
FileFilter(文件过滤器,可选)作用:指定文件类型的筛选条件(例如 .xlsx) 格式:描述文字 + 通配符,多个条件用英文逗号分隔。默认值:"All Files (.),.*"(显示所有文件)。示例:"Excel文件 (*.xlsx), *.xlsx, 文本文件 (*.txt), *.txt"
FilterIndex(过滤器索引,可选)作用:设置默认选中的文件类型(从1开始编号)。默认值:1(首个筛选条件)。示例:2 ' 表示默认选中第二个文件类型(如文本文件 *.txt
Title(对话框标题,可选)作用:自定义文件选择对话框的标题。默认值:“打开”(英文环境下可能显示为 “Open”)。示例:"请选择需要导入的文件"
ButtonText(按钮文字,可选)作用:仅在某些系统环境(如旧版 macOS)下有效,一般不使用。
MultiSelect(多选模式,可选)作用:允许用户选择多个文件。取值:True/1:启用多选。False/0:禁止多选(默认)。
场景举例

1.1 MultiSelect 文件多选和单选的区别

Sub fileSingleSelect()Rem MultiSelect:=False 文件单选
pathFiles = Application.GetOpenFilename(filefilter:="Excel 文件 (*.xl*),*.xl*", MultiSelect:=False)End Sub
Sub filesMultiSelect()Rem MultiSelect:=True 文件多选
pathFiles = Application.GetOpenFilename(filefilter:="Excel 文件 (*.xl*),*.xl*", MultiSelect:=True)End Sub

1.2 多选和单选框体差异
框体功能差异对比
2.1 注意事项

文件操作: GetOpenFilename 仅返回文件路径,不会自动打开文件。需要使用其他方法(如 Workbooks.Open)处理路径。
错误处理: 始终检查返回值是否为 False,避免用户取消操作导致错误。
数组处理: 多选模式下返回值是数组,建议通过 For Each 遍历。返回的数组的默认起始索引为1,如下图展示
起始索引定位

2.2 代码举例场景

2.2.1 获取全文件路径中路径的方法
2.2.2 获取全文件路径中文件名称的方法

Sub quickGetFile()Rem 通过调用VBA启用其本身的文件选择器实现,方便快捷
Dim fileName As String
Dim filePath As StringRem 调用VBA应用自带的文件筛选框,并可以设置单选(点选)或者多选文件(ctrl + 选)
pathfiles = Application.GetOpenFilename(filefilter:="Excel 文件 (*.xl*),*.xl*", MultiSelect:=True)If IsArray(pathfiles) Then  '对话框选择了至少一个文件对象Rem 获取文件并打印到立即窗口For Each pathFile In pathfilesRem 获取字符串最后一个"\"的位置PathSeparator = InStrRev(pathFile, "\")Debug.Print PathSeparatorDebug.Print (pathFile)Rem 获取全文件路径中路径的方法filePath = Left(pathFile, PathSeparator - 1)Debug.Print filePathRem 获取全文件路径中文件名称的方法fileName = Right(pathFile, Len(pathFile) - PathSeparator)Debug.Print fileNameNext pathFile
ElseDebug.Print "您未选择任何文件对象"
End IfEnd Sub

2.2.3 代码执行展示

积极响应程序执行

http://www.xdnf.cn/news/8722.html

相关文章:

  • 计算机视觉与深度学习 | 基于 YOLOv8 + BeautyGAN + CodeFormer + Face Parsing 实现简单的人脸美颜
  • 【来自纳米AI-大模型】ubuntu 24.04 登陆界面分辨率太高,内容显示得特别小 问题解决方案(亲测有效)
  • lua脚本学习笔记1:Vscode添加lua环境_lua基本语法
  • HarmonyOS赋能套件介绍
  • 开篇:MCP理论理解和学习
  • 元组可以比较大小吗?一次返回多个值?编程语言的元组?声明变量一定需要指定类型吗?
  • Ubuntu20.04 gr-gsm完整安装教程
  • Kanass V1.1.1版本发布,支持查看项目/迭代/事项进度
  • 剖析 Spring 中 @ResponseBody 原理与 Tomcat NIO 写事件(SelectionKey.OP_WRITE)的协作机制
  • MySQL分库分表
  • vue3中使用computed
  • Spark集群架构解析:核心组件与Standalone、YARN模式深度对比(AM,Container,Driver,Executor)
  • kafka之操作示例
  • 大文件上传,对接阿里oss采用前端分片技术。完成对应需求!
  • 【MySQL】第7节|Mysql锁机制与优化实践以及MVCC底层原理剖析
  • ubuntu 安装latex
  • 清除 Ubuntu 磁盘空间
  • 安卓开发用到的设计模式(2)结构型模式
  • 开发者工具箱-鸿蒙金额转换开发笔记
  • R语言学习--Day08--bootstrap原理及误区
  • Ollama01-安装教程
  • 【MySQL】07.表内容的操作
  • Android 16系统源码_自由窗口(一)触发自由窗口模式
  • Gateway全局过滤器:接口耗时统计与黑白名单配置
  • R语言科研编程-柱状图
  • STM32 定时器输出比较深度解析:从原理到电机控制应用 (详解)
  • 黑马点评双拦截器和Threadlocal实现原理
  • 行列式的线性性质(仅限于单一行的加法拆分)
  • 电机控制储备知识学习(五) 三项直流无刷电机(BLDC)学习(四)
  • 思科硬件笔试面试题型解析