VBA基础实战之自动化录入表单
大家好,我是一分钟学Excel。经过前几期视频的VBA基础学习后,是时候来一波实战检验自己的学习水平啦!
今天的挑战很简单,用最基础最简单的VBA语句来实现自动化录入表单。实现效果如下:
从演示效果中,我们可以发现,程序具备的功能为提供一个可输入的主页工作表,输入的信息会自动填充到详细信息的表格之中。这样的功能在日常生活中也会用到,接下来,让我们正式开场吧~
首先,先别着急,先来思考一下,不用代码,怎么去完成这样一个功能?我猜你会这样做,先复制主页工作表中的内容,然后跳转到详细信息工作表中,运用选择性粘贴功能将其粘贴。就像这样:
其实这样的思路也可以用来编写程序。因为开头的时候有说过,我们是以最简单最基础的VBA语句来实现,所以我们将思路整理一下,分别为这三步:
- 选中单元格并进行内容复制;
- 跳转工作表进行选择性粘贴;
- 完成粘贴后进行主页工作表内容清空。
根据这三步的内容,我们分别展开VBA语句编写。首先,我们需要明白,一个VBA程序的诞生是由Sub语句开始的,中间跟上程序功能代码,最后以End Sub进行结尾。
所以在最开始,需要先写上Sub语句,Sub单词后跟上空格在跟上程序名,这时候按下键盘上的回车键,VBA会自动识别,填充上括号及End Sub语句。
好,准备工作完毕。现在可以开始第一步:选中单元格并进行内容复制。
一、选中单元格并进行内容复制
从表格中,我们可以看出C6、C8、C10单元格中是输入信息的单元格。也就是说,我们首先需要选中这三个单元格,然后进行复制。
我们试着用英文去进行翻译【选中单元格区域】这句话。区域、范围的英文为:Range,选中、选择的英文为:select。而在VBA中,【选中单元格区域】这句话的代码表示为:
- 代码
'step1:选中区域 '
Range("C6,C8,C10").Select
单引号在VBA中表示注释,文字两侧加上一组单引号的注释并不会被程序执行,只做提示作用。养成写注释的好习惯,有利于理清思路。
从上可知,【选中单元格区域】的VBA语法为Range跟上括号,括号中是区域名(多个区域需用逗号进行分割)然后跟上点号,点号的作用为调用,调用什么方法,后方的Select便是Select方法,作用为选中。简单来说,VBA的语法与我们平时习惯的中文语法相反,翻译过来便是C6—C10单元格区域调用Select方法。
这样来看,你也许会发现一个规律。VBA语法往往是主语(如单元格区域)然后调用,调用为点号,点号后跟上对应的方法即可。不过,都是英文哦~
编写完这句语句后,我们可以点击上方菜单栏去看看运行效果是否如同预想的一样,C6—C10单元格区域被选中。
- 运行结果
选中的问题结束后,便到了复制的功能。同样的,灵活变通一下,即使写不出来,你也应该能够猜到,VBA的表现形式为:
选中区域.复制
剩下的就很简单了,翻译它即可。注意选中后的区域应该是名词,select为动词,selection为名词。再配上点号与复制的英文(copy)即可。
- 代码
'step2:内容复制'
Selection.Copy
- 运行结果
二、跳转工作表进行选择性粘贴
【跳转工作表进行选择性粘贴】顾名思义,首先需要先跳转工作表,跳转工作表的实际操作为点击工作表即可,与上文的选中单元格区域一样。使用工作表("表名").Select 来实现效果:
- 代码
'step3:选中详细信息工作表'
Sheets("详细信息").Select
工作表跳转之后,面临一个问题。如何让VBA识别空白区域进行粘贴?
我的想法是,让VBA先识别到表格的尾部区域,然后再向下移一格。从而到达表格最下方的空白区域,就像这样:
这里就需要借助一些方法来进行实现,分别是:
- Range("A1")定位单元格
- End(xlDown)移动到表格最尾部
- Offset(1,0)定位下移一格
Range()前面我们学习过它的用法,至于End()与Offset()这里简单提一下。首先End()是以Range单元格为基准定位到其上、下、左、右最后一个有数据的单元格。
xlup上; xldown下; xltoleft左; xltoright右
Offset()是以当前单元格为基准根据括号中的内容进行对应移动。Offset(行数,列数)。如Offset(1,0)向下移一行,移0列。
定位的问题解决后,便是一个本文的重点:【选择性粘贴】
选择性粘贴
作为本文的一大难点,涉及到的英文很多,但是没关系,看看这两张图,会容易理解得多。首先,VBA中想要使用选择性粘贴这个功能,可以用Range对象的
PasteSpecial
方法。它与Excel函数一样,有参数。语法为:
PasteSpecial(Paste,Operation,SkipBlanks,Transpose)
PasteSpecial(粘贴方式,运算方式,是否跳过空白格,是否转置)
通过我们常用的选择性粘贴的图来对比学习,要容易理解一些:
仔细观察图片与语法,你会发现,对应四个参数的恰好就是图片中的四个功能选项(粘贴、操作、跳过空单元、转置)
问题来了,参数如何编写呢?
对照上图,我们需要执行的操作为:执行粘贴【值】,操作【无】,不需要跳过单元格,需要转置。则代码为:
- 代码
'step5:选择性粘贴内容'
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks :=False, Transpose:=True
- 运行结果
功能基本上都完毕了,最后便是第三步:完成粘贴后进行主页工作表内容清空。
三、完成粘贴后进行主页工作表内容清空
相信到第三步,你的心里大多已经有了思路。首先,跳转主页工作表,很简单:
- 代码
'step6:返回主页清空内容'
Sheets("主页").Select
清空内容也很简单,在选中的单元格区域进行调用清空方法即可。
- 代码
Selection.ClearContents
到这里,所有程序功能便编写完毕了。完整代码如下:
Sub 自动填入()
'step1:选中区域 '
Range("C6,C8,C10").Select
'step2:内容复制'
Selection.Copy
'step3:选中详细信息工作表'
Sheets("详细信息").Select
'step4:选中表格最下方空白区域'
Range("A1").End(xlDown).Offset(1, 0).Select
'step5:选择性粘贴内容'
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=True
'step6:返回主页清空内容'
Sheets("主页").Select