导语:
前一段时间,旁边行政部门要整理一部分EXCEL表格数据,工作内容挺简单,就是打开每个文件,替换掉某一列的几个关键字。但是数量庞大,大概2000多份文件,一时间难以完成。
后来求助我们部门,刚好我和我的几个同事在,就想办法用VBA宏代码处理了一下。写VBA的时间大概不到半小时,加上调试、跑代码、修改部分异常数据的时间大概用了一下午的时间。从此,隔壁部门给我们说话的语气都不一样了(嘿嘿)。
进入今天的正题:EXCEL多文件、多工作表修改。掌握这个之后,处理表格数据只有工作难易程度,没有工作量大小。大部分时间可能都用在跑程序上面了(EXCEL 处理百万级别的数据真的很慢,不过几万条到几十万数据还是绰绰有余的)。
今天我们先学习第一部分,如何修改多个工作表(Sheet表)
先看下效果:

首先,我们需要编写修改单个工作表的 EXCEL VBA 宏代码。
为了节约时间,我们用上一期编写的自动调整格式的代码。想学习这个代码怎么编写(拼接)可以参考上期:EXCEL VBA零基础教程:自动设置表格格式(办公室职场必备)。
代码功能:根据表格的内容自动调整表格的表头以及内容字体大小。

我们将这段代码复制出来,放到另一个Sub 程序模块中。
原来是这样的:
Private Sub CommandButton1_Click()
For i = 1 To 79
If Cells(i, 1) = "实验序号" Then
’我是要运行的代码1
‘我是要运行的代码2
End If
Next
End Sub
现在将Private Sub CommandButton1_Click()和End Sub之前的内容拿出来,放到另一个过程中。类似于从一个盒子里拿出来,放到另一个盒子。
Sub 自动设置格式()
For i = 1 To 79
If Cells(i, 1) = "实验序号" Then
’我是要运行的代码1
‘我是要运行的代码1
End If
Next
End Sub
这段代码,除了表格没有按钮外,达到的效果和之前的一样。

这段代码可以像搭积木一样放到其他代码中。这样时间久了,就会积累较多的功能代码片段,最后遇到实际问题时,只需要将代码片段按照一定的逻辑拼接起来就可以了。

然后,需要遍历修改单个文件的多个工作表。
我们用到的是Sheets 对象,WorkSheets对象也一样。刚开始不知道怎么用,可以先从网上找些代码改改,然后运行一下,熟悉下工作原理。最后写自己的VBA代码就得心应手了。

Sub 修改多个工作表()
For Each Sheet In Sheets
Debug.Print Sheet.Name
Next
End Sub
‘知识点:这些都在之前的文章里讲过,有兴趣的同学可以参阅之前的文章。
-
for each next 循环
-
Sheets 工作表对象
-
Debug.Print: 一般是用来显示的,一般用来调试时用的,打开视图,立即窗口即可看到,比Msgbox 方便多了
然后,我们实现每个工作表的切换,用sheet.activate这个功能。类似于我们手动点击工作表的名称,达到切换工作表的内容。

Sub 修改多个工作表()
For Each Sheet In Worksheets
Sheet.Activate
Debug.Print Sheet.Name
Sleep (1000) '暂停一秒
Next
End Sub
’注意要实现 Sleep (1000) '暂停一秒的功能需要在最前面加上这一句
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
最后我们把 Debug.Print Sheet.Name 这句换成之前完成的“ 自动调整格式() ”这个过程就可以了。
Sub 修改多个工作表()
For Each Sheet In Worksheets
Sheet.Activate
自动调整格式
Sleep (1000) '暂停一秒
Next
End Sub
看戏效果:

总结:处理多个工作表的的关键,是要处理好一个工作表。可以将这个部分写成一个小的过程模块(类似于一个核心零件)。然后处理多个工作表的时候,把写好的核心放到工作表遍历的循序中就可以了。先修改一个工作表,然后用同样的方法修改多个工作表。
下一期将用实例讲解,如何修改多个文件,1000个文件修改也就半个小时的事(偷笑)。求转发,求关注(嘻嘻)。
本期练习文件:加关注,私信回复:工作表修改,即可得到,自己慢慢研究吧。
