常用功能加载宏——工作簿目录
时间:2022-07-22
本文章向大家介绍常用功能加载宏——工作簿目录,主要内容包括其使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
要创建工作簿的目录,其实就是遍历获取所有的文件,然后过滤一下,再增加超链接就可以:
首先在customUI.xml中增加代码:
<button id="rbbtnWorkbookDir" label="工作簿目录 " onAction="rbbtnWorkbookDir" imageMso="FileSaveAsExcel97_2003" />
回调函数:
Sub rbbtnWorkbookDir(control As IRibbonControl)
Call MShtWk.WorkbookDir
End Sub
函数实现:
Sub WorkbookDir()
Dim i As Long
Dim result() As Variant
Dim rngout As Range
On Error Resume Next
Set rngout = Application.InputBox("请选择输出单元格", Default:=ActiveCell.Address, Type:=8)
On Error GoTo 0
If rngout Is Nothing Then
Exit Sub
End If
'这里保证rngout只是单个的单元格,因为后面设置超链接的时候只要设置单个单元格
Set rngout = rngout.Range("A1")
Dim strDir As String
Dim RetDirs() As String, RetFiles() As String
'选择要查找的文件夹
strDir = GetFolderPath()
If VBA.Len(strDir) = 0 Then Exit Sub
'遍历获取文件
If ScanDir(strDir, RetDirs, RetFiles) = -1 Then Exit Sub
'定义结果数组
ReDim result(UBound(RetFiles) + 1, 1) '+1是因为有1个标题,可能会比RetFiles多一个
result(0, 0) = "序号"
result(0, 1) = "工作簿名称"
Dim flag As Boolean
Dim pRow As Long
pRow = 0
For i = 0 To UBound(RetFiles)
flag = False
'避免用Or将多个判断连接在一起,因为那样会每一个判断都执行
If VBA.InStr(RetFiles(i), ".xls") Then
flag = True
ElseIf VBA.InStr(RetFiles(i), ".xls") Then
flag = True
ElseIf VBA.InStr(RetFiles(i), ".xlsx") Then
flag = True
ElseIf VBA.InStr(RetFiles(i), ".xlsm") Then
flag = True
End If
If flag Then
'pRow记录的是有多少个满足条件的
pRow = pRow + 1
result(pRow, 0) = pRow
result(pRow, 1) = RetFiles(i)
'添加超链接
rngout.Offset(pRow, 1).Hyperlinks.Add rngout.Offset(pRow, 1), RetFiles(i)
End If
Next
If pRow Then rngout.Resize(pRow + 1, 2).Value = result
Set rngout = Nothing
Erase result
End Sub
如果是想要创建文件的目录,就不需要中间那些判断是否包含文件后缀就可以。
ScanDir这个函数在创建MyVBA加载宏中已经提到过。
GetFolderPath也和ScanDir一样,放在VBAProject下的同一个文件里,代码:
Function GetFolderPath() As String
Dim myFolder As Object
Set myFolder = CreateObject("Shell.Application").Browseforfolder(0, "选择文件夹", 0)
If Not myFolder Is Nothing Then
' GetFolderPath = myFolder.Items.item.path
GetFolderPath = myFolder.Self.Path
If Right(GetFolderPath, 1) <> "" Then GetFolderPath = GetFolderPath & ""
Else
GetFolderPath = ""
End If
Set myFolder = Nothing
End Function
- ExtJs学习笔记(11)_Absolute布局和Accordion布局
- ExtJs学习笔记(9)_Window的基本用法
- DateTime在ExtJs中无法正确序列化的问题
- ELK实时日志分析平台环境部署--完整记录
- 梳理Linux下OSI七层网络与TCP/IP五层网络架构
- 字符编码-使用c#研究
- iframe高度自适应的IE解决方案
- javascript读写本机文本文件
- 崔立鹏:腾讯云为知识竞技游戏提供解决方案
- Mysql之binlog日志说明及利用binlog日志恢复数据操作记录
- 常用的AJAX弹出层代码
- Linux下检测IP地址冲突及解决方法
- linux如何挂载windows下的共享文件
- silverlight2中的定时器,以及如何动态改变控件的坐标
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- java向数据库中插入中文出现乱码
- Flutter基础widgets教程-FractionallySizedBox篇
- 关于myeclipse控制台输出中文乱码的问题
- nutz 自定义查询 分页 取值
- jquery-uploadifyv3.2.1 文件上传插件 学习
- Flutter基础widgets教程-Icon篇
- Redis:持久化
- Flutter基础widgets教程-IconButton篇
- Flutter基础widgets教程-Image篇
- Go - 学习 grpc.Dial(target string, opts …DialOption) 的写法
- Flutter基础widgets教程-IntrinsicHeight篇
- Flutter基础widgets教程-Baseline篇
- springcloud本地开发的微服务如何调用远程k8s的微服务
- Flutter基础widgets教程-LimitedBox篇
- 算法:滑动窗口(二)