本次我们要写一个一键合并多个sheet的VBA小工具。展示的时候都是图片展示,文章最后面有源代码可以复制。大家可以复制尝试。
这其中涉及到的Range和相对路径的知识点,大家可以前往其他文章查看。
(1)Range的用法 第一天
(2)VBA中的相对路径第二天
本章我们会整理一些比较细碎的知识点。
并且完成我们的第一个小功能!合并多个sheet!
使用Now()方法为合并后的EXCEL文件命名因为考虑到源数据变化,我们需要不断的点击合并。因此这里需要有一个动态的命名方法。如果将命名写成固定的名称,在重复导出的时候会出错。
首先Now()函数返回当前的日期+星期+时间,返回的是Date类型的,所以我们需要使用CDate()函数将Now()的返回值转化为字符串。
这边我们发现输出的字符串有空格,也有冒号【:】字符,正常的文件名,不允许这样的字符出现。因此我们需要对字符串进行替换处理。
使用Replace()方法替换命名中不合法的字符Replace()方法接受3个参数,非常简单
Replace(需要操作的字符串,查找的字符,替换的字符)
为了美观,我们把斜杠号【/】也一并去除。
这样命名这部分就完成了。
使用Workbooks.Add方法,新建EXCEL文件,存放汇总后的数据这个方法十分简单,只需2行代码,就可以新建一个EXCEL文件。
这里实测运行无误。
存放数据的容器都有了,但是我们却没有保存,这里就需要使用到上面和以前的知识点了。
我们将该新建的EXCEL文件存放在源数据表的同级目录。
这边为了后期修改,我们将该功能封装成一个函数,该函数返回我们新建的EXCEL对象。供合并使用。
这边我们已经解决了一个较为关键的知识点。
现在我们就得开始合并每个sheet的内容了。VBA合并sheet本质上就是模拟人工,我们人为合并的时候,(假设3个sheet)操作顺序是这样的:
①打开第1个sheet,复制,粘贴到指定的EXCEL中。(第1次复制粘贴带着表头)
②打开第2个sheet,复制,粘贴到指定的EXCEL中。(第2次复制粘贴不带着表头)
③打开第3个sheet,复制,粘贴到指定的EXCEL中。(第3次复制粘贴不带着表头)
因此这边就需要循环一个EXCEL中的所有Sheet。
所以我们就需要下面的知识点!
使用For...Each循环每个Sheet大家可以看一下图,在使用For Each的时候,不要忘了加上Next。
既然我们可以循环到每个sheet了,那我们就可以操作每个sheet中的数据,然后复制到存放的表了。但是由于循环的操作都是一样的。所以第一次复制表头而二三次不复制表头循环里写是不太美观的。因此,我们把复制表头单独列出来写。
并且我们将合并后要存放的数据存放EXCEL,作为我们的参数,这样后期的修改会比较方便。
这样就完成了!
可以参考下动图:
以下是源代码,大家可以尝试一下。有任何问题欢迎大家留言~
Sub Run() Dim tar_wb As Workbook Set tar_wb = CreateWorkbook Call MergeContent(tar_wb)End Sub'函数名: CreateWorkbook'接受参数:无'返回值:Workbook(返回创建的Workbook)'说明:创建一个Excel文件,存放合并的数据Private Function CreateWorkbook() As Workbook Dim fileName As String Dim filePath As String Dim nowDate As String nowDate = CDate(Now()) nowDate = Replace(nowDate, ":



