大家好,这是Excel小火箭的第53次分享,如有不妥之处,欢迎批评指正。本期文章包含了小火箭2.5所有VBA常用代码,如:自动生成目录、获取文件列表、合并/拆分多个工作表/工作簿、一键破解工作表保护、自动生成Word报表、进度条的显示与控制、批量重命名、批量插入空白行等…本次新增功能:生成工作表目录、生成文件清单目录、生成文件夹及子文件夹下所有文件目录。您可以:①点击安装小火箭,会自动集成到Excel工具栏,即可直接使用②也可以双击小火箭aSmallRocket或拖放到任意Excel中打开使用;③又或者大力按下Alt键 +F11查看所有源代码。接下来是小火箭的功能和编程思路,总体原则:尽量只读取而不去修改源数据,因为VBA操作不可逆,Ctrl+Z无法回到上一步。
模块1:一键汇总多个工作表,适用于一次性汇总多个不同的工作表。
VBA编程思路:①新建一个汇总表,(防止破坏源表数据),For each…遍历工作表,复制表粘贴到汇总表,如果是第一个表则整体复制粘贴,否则去掉表头。②注意可通过InputBox交互,获取表头行数的信息。
→点我查阅源文章
模块2:一键拆分工作表,适用于按指定列的值拆分成多个工作表VBA编程思路:①复制整个工作表(防止破坏源数据),通过InputBox获取想要拆分的任意关键列;②将关键列存入数组,遍历写入字典获取唯一值,新建工作表;③将所有数据存入数组,按关键字读取到新数组,转置到新工作表;④注意事项,Excel同一工作薄最多允许存在255个工作表,读取关键字时可以判断超过则提示溢出。
→点我查阅源文章
模块3:适用于一键汇总多个不同的工作簿,不知道工作薄和工作表区别的小伙伴看这里:《工作表与工作簿的区别》
VBA编程思路:①新建汇总工作表,通过GetOpenFilename获取文件(工作簿)列表,存放到数组,遍历数组,通过GetObject后台打开表格,复制粘贴到汇总表,关闭工作表…②有时候表格数据多读取较慢,为提高用户体验,可在状态栏显示当前进度。→点我查阅源文章
模块4:适用于按照指定列的不同字段拆分成独立的工作表。
VBA编程思路:参见模块2拆分工作表,此处只需直接调用采用Worksheet.Copy 方法 ,将工作表复制到工作簿的另一位置。①读取当前工作簿中工作表名备用;②新建文件夹用于存储拆分后的工作簿;③遍历整个工作簿,将新增的工作表通过.copy的方法逐个另存为;④通过Shell 自动打开临时文件夹。
模块5:文件批量重命名,适用于任意格式文件的批量重命名
VBA编程思路:①新建临时表,通过GetOpenFilename获取文件列表,并提取文件名到临时表……②输入修改后的文件名,再次点击批量命名完成……③注意事项:Name As会直接重命名并替换原文件,操作前可通过CopyFile备份文件。当然你也可以通过一行代码搞定,试试看这里:《一行代码可以干什么?》
→点我查阅源文章
模块6:批量生成Word报表,适用于固定模板的Word报表生成,如日周月报..VBA编程思路:根据自身需求建立word模版文件,遍历工作表内容按需提取,通过Documents.Open只方式获取word模版中书签定位关键字段,复制表格所需内容到word模版文件即可。
模块7:程序执行进度的显示和控制,适用于直观判断程序是否正在执行及执行进度。
VBA编程思路:试想一下,你点击运行程序后,除了等待并不知道程序是否正在执行或者被卡死(如进入了VBA死循环),这种体验太糟糕了…… 还好我们可以控制程序显示进度,窗体或状态栏都可以,见上方示例……
→点我查阅源文章
模块8:一键解除工作表保护。
有时候,我们打开工作表发现只有部分单元格可以编辑,点击其他单元格都显示“您试图更改的单元格或图标受保护”,无法正常编辑或下拉填充,也没有办法快捷筛选。
模块9:适用于批量获取文件夹及其子文件夹下所有文件列表。
VBA编程思路:通过 FileDialog遍历文件及子文件下所有文件,例如:A文件夹下包含B文件夹和文件清单,B文件夹下包含C文件夹及文件清单...利用VBA编程获取对应属性值,比如件的小,修改日期等。→点我查阅源文章
模块10:适用于一键生成所有工作表目录、或生成文件夹下文件目录、文件夹及子文件下所有文件清单目录
编程思路:①遍历获取工作表名;②通过Hyperlinks.Add 方法添加超链接;③遍历文件夹及子文件夹获取文件名,添加超链接。
→点我查阅源文章
方式①:点击查阅源文章,从公众号历史原文章中直接复制粘贴使用;