初探VBA(甜点篇)

世上最枯燥最无聊的事无疑于机械式地,反复地做同样一个或一组动作,如今有个新词:工具人。形容的很贴切。

2021一开始,我就切实体验了一下“工具人”这个工种,工作的原因,每天需要处理大量EXCEL表格数据,而这其中最常干的活就是:复制、粘贴、填数据、改数据、删除数据…

上面这些不是最主要的,关键是每次都要对几百份表格文件,反复无脑地进行这些动作。真的是让人抓狂和崩溃的事,怎么办?
想办法呗。

我将任务进行梳理,发现当前所做的事情有个突出的特点,也是最让人讨厌的地方:
在许多个EXCEL文件中,做完全相同的动作,完全相同。

如果模拟手工操作的话,就是这样的步骤:
1、打开文件1
2、一顿操作猛如虎
3、打开文件2
4、一顿操作猛如虎

就像这样,反反复复做个几百次。
这不正是程序擅长干的事儿吗,此时心头的那个勾子开始不安分了,我决定尝试一下,倘若能让电脑帮自己做这个事,岂不是爽歪歪。
通过上面的梳理,其实这个事情的逻辑已经很清楚了,因为确实很简单,所以实际上也没啥逻辑可言,但刚开始嘛,有点笨拙是正常的,不是吗
事情的逻辑就是:
循环反复打开文件,进行相关操作
所以要解决的问题是

1、首先是如何打开文件,手工是双击,可VBA中应该怎么做呢
2、然后是如何循环地打开待处理的文件,通过VBA如何实现
3、最后是在打开的文件中进行相关的数据处理

好了,问题明确了,那就开干!
通过搜索,我首先找到了第1个问题的解决方法:

1
2
3
4
5
6
7
8
9
10
'选取单个文件打开后,处理并关闭
Sub test()
Dim str As String
Dim wb As Workbook
str = Application.GetOpenFilename("Excel文件,*.xls*", , "请选择")
Set wb = Workbooks.Open(str)
'###################'这里针对打开的文件进行操作'##########
wb.save   
wb.Close
End Sub

本以为问题就这么愉快地解决了,然而事实证明,so young,so simple.

虽然实现了文件的打开操作,但是以上代码,每次只能选取单个文件打开,而我想要的是循环打开多个文件。也就是接下来的第2个问题。
别看只是从1到多,这可着实花了些时间去找解决方案,最后还是请教了前面提到的大神才得以解决,这也说明:跟着高手混,那学习效率杠杆的。
于是,我如获至宝地拿到问题2的解决方案,现实却啪啪打脸,看着这些代码,我一脸懵圈。

1
2
3
4
5
6
7
8
9
10
11
12
13
'选取多个文件打开后,处理并关闭
Sub test1()
Dim str()
Dim wb As Workbook
Dim i, j As Integer
str = Application.GetOpenFilename(",*.xls*", , "请选择", , True)
For i = LBound(str) To UBound(str)
Set wb = Workbooks.Open(str(i))
'###################'这里针对打开的文件进行操作'##########
wb.Save
wb.Close
Next
End Sub

虽然有点底子,可还是看不太明白,可是既然大神都说这么可以,那就OK。
来不及搞懂了,还有那么多文档要处理呢,不好意思,我就先拿来主义了。于是,我马上实操了一把,代码是这样的:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
'实战应用:将多个EXCEL文件中的表名为“网络性能验收1-CQT”中的G8单元格内容清空
Sub test1()
Dim str()
Dim wb As Workbook
Dim i, j As Integer
str = Application.GetOpenFilename(",*.xls*", , "请选择", , True)
For i = LBound(str) To UBound(str)
Set wb = Workbooks.Open(str(i))
'###################'这里针对打开的文件进行操作'##########
Sheets("网络性能验收1-CQT").Range("g8") = ""
wb.Save
wb.Close
Next
End Sub

以上代码实现的就是将选取的多个EXCEL文件中指定表格中的指定单元格中内容清空。
将代码copy到VBA代码窗口,然后运行,随后就立即弹出一个文件选取对话框,选中想要处理的EXCEL文件,点击确定。
注意,期待已有的那种爽的感觉来了,文件一个个地打开并处理,自动保存、关闭.而你则悠哉游哉,尽情享受这轻松一刻,还有电脑帮你打工的快感,剩下要做的就是享用劳动成果,无他。

可是你以为这就结束了,然而并没有,其实才刚刚开始,别忘了咱们最初讲的,这波操作只是让你直观地体验一下“爽”的感觉,因为这会让接下来的路走的更远。

接下来要做什么呢?肯定是去搞懂这段代码啊,俗话说的好:拿别人给的“鱼”,不如自己学会“渔”。因为刚才给的代码只是适用于某些固定场景,如果不搞懂其中原理的话,稍微换个场景,就不知怎么弄了。难道再去找大神?大神那是要做大事的,反正我是不好意思了。
那该咋办?整呗!不就这几行代码吗,弄不懂我就把它吃喽。

好,开干!!!