VBA基础实战之自动化录入表单二
大家好,我是一分钟学Excel。今天我们继续来讲解VBA的基础实战,在上一期中我们讲解了最简单最基础的语句去简单完成了自动录入表单的制作,不记得的小伙伴可以点击下方往期文章回顾哦。
很多小伙伴在完成第一期内容制作的时候,是不是觉得虽然简单但是很麻烦?那么多的语句那么多的英文绕得头疼。本期将在上期的基础上进行优化!编程嘛,肯定是从繁到简啦~
在这一期中,我们将运用VBA中的窗体与控件结合完善程序,进行自动录入表单的进化操作,实现效果如下:

来吧,学习时间!

本期我们要开始学习在VBA中的窗体,窗体是什么意思呢?另一个词语,你应该更有印象,那就是弹窗!如果你不太清楚弹窗的话,可以看看你的电脑右下角有没有广告弹窗~
在VBA中,最简单的方式去创造一个弹窗便是MsgBox(信息盒子),是用MsgBox语句,我们可以简单的获取一个弹窗,就像这样:

还有另外一种弹窗方式便是Inputbox,这也是我们本期学习的第一个知识点。
INPUTBOX
功能
INPUTBOX意思是提供一个可供输入的窗体盒子。又到了学习英文的时候啦~我们把将其拆解为INPUT(输入)和BOX(盒子)两个单词,拼凑起来便是输入盒子,也就是简单的输入窗口。

使用
使用方法非常简单,只需输入INPUTBOX(“提示语句:”)便可创建一个简单的输入窗口。
括号中的内容为提示信息哦~
代码:
Sub 窗体练习
INPUTBOX(“提示语句:”)
End Sub
实现效果:

这里有一个小坑哦,仔细看实现效果,你会发现,当我们进行输入之后,数据消失了?
这是为什么呢?其实这是因为我们并没有为数据设置一个归处,无家可归的数据只能原地消失,这时我们就需要进行第二步操作啦。那就是给我们数据建造一个家——变量。
变量
变量应用十分广泛,不仅在VBA中时常用到,在其他编程语言中他也是随处可见的。变量简单的来说就是存储数据的空间。
这样理解可能有一定困难,简单举个栗子,你就清楚了。
在生活中,我们常常要保存电话号码,就像这样:

当我们在电话簿里存储电话号码时,我们不会直接存储13612341234,因为当我们电话簿中联系人非常多时,寻找电话就异常费时费力,我们常常是这样做的:

这时我们就需要一个盒子,把这个电话号码丢进去,并为它写上一个标签,命名为张三。当我们下次使用该号码时,直接找到张三就好了。

在编程过程中也是一样的,为方便查找到一个数据,我们会使用一个盒子来装这些数据并打上标签,而这个盒子就是变量,标签就是变量名,打标签的过程在编程世界中就是变量赋值过程。

我们会使用一个等号来进行赋值,这个等号称为赋值等号。

明白了大致的原理后,现在我们来实际操作一下:把INPUTBOX语句的内容赋值给变量“工号”,最后使用msgbox输出变量的内容。
代码:
Sub 窗体练习
工号 = INPUTBOX(“提示语句:”)
姓名= INPUTBOX(“提示姓名:”)
部门= INPUTBOX(“提示部门:”)
End Sub
实现效果:

这一步操作完后,依次将姓名、部门都进行变量赋值。

这一步完成之后,需要思考一个问题,我们设计的程序最主要的功能便是将输入的内容放置于表格之中,那么既然我们已经将输入的内容赋值给了变量,那么我们如何该将变量放置于表格之中呢?
上一期中我们的操作办法是,先获取表格中的空白区域,然后将主页表格的值再复制粘贴进去表格之中。而现在,我们还需要复制粘贴吗?

nonono~设计程序的目的便是让重复的操作自动化,复杂的操作简单化。现在我们学习了变量之后,只需要将变量的值使用赋值等号“=”放置于表格的对应区域就好了。就像这样
代码:
Sub 窗体练习
工号 = INPUTBOX(“提示语句:”)
姓名= INPUTBOX(“提示姓名:”)
部门= INPUTBOX(“提示部门:”)
Range("A1").End(xlDown).Offset(1,0).Value = 工号
Range("A1").End(xlDown).Offset(0,1).Value = 姓名
Range("A1").End(xlDown).Offset(0,2).Value = 部门
End Sub
实现效果:

为了方便录入,还可以新建一个按钮绑定代码进行录入
实现效果:

好了,现在简单的窗口已经设计完毕,我们可以发现运行的时候,还是有一些麻烦,每一次输入都要点击一次确定,然后再开始输入下一步,如果前面输入错误的话,都不能返回上一步。所以,我们需要对程序进行再一次优化,变成这样:

难度升级!想要实现这样的效果,我们将开始学习新的知识点,便是:【窗体与控件】
窗体与控件
其实在VBA中自带了窗体功能,想要使用,只需在对应的工作表处右键点击插入用户窗体即可,或点击上方菜单栏中的插入来使用用户窗体。

这时会出现一个用户窗体的使用界面,分别为:编辑页面、控件页面、信息页面。

窗体信息页面栏可修改窗体名称,调节字体字号等操作,这里我们可以修改窗体名称为:表单录入。

而如果想要在窗体上增加一些功能,比如提示语句、按钮、输入框等。这时候,控件便登场了!
控件页面主要为窗体增加一些信息。

如点击字母A的按钮可添加提示信息,这里我们创建三个提示信息,分别为工号、姓名、部门。在详细页面区,我们还可以进行字体修改、字号调整与颜色更换等。
提示信息完毕后,就到了文本输入框,文本输入框与INPUTBOX一样,都是用于提供文本输入的框框。
文本框按钮在第一排第三个(ab)按钮哦~

最后创建两个按钮,一个用于录入执行,另一个用于退出录入。

到这一步,基本的布局便完成了。当然,现在还是比较丑的,想要美化的,可以自行美化哦~
那么,重点戏要来啦!该写代码了!

悄悄的告诉你,代码很简单哦~举一反三,前面我们使用的INPUTBOX语句既然与这里控件的文本输入款是一样的功能。那么,刚刚写的代码是否能复用呢?
答案是,肯定的!
我们只需要将INPUTBOX的语句换成控件的文本输入框语句就可以了。根据想象信息,我们可以知识文本输入框的名称,得到名称就很好写了,只需要使用点号去调用值即可。
代码
工号 = TextBox1.Value
姓名= TextBox2.Value
部门= TextBox3.Value
看到这里的代码,真的想感叹一句,只闻新人笑,不问旧人哭~
既然代码修改完毕后,问题来啦,我们该如何去运行代码呢?看看,我们刚刚制作的窗体上有两个按钮,一个是录入,一个是退出。
录入的功能是,当按钮被点击时,文本输入框的信息就进行自动填充。因此我们需要在录入按钮中编写代码。双击录入按钮便可以进入到按钮的代码编辑页面。
代码
Pricate Sub CommandButton1_Click()
工号 = TextBox1.Value
姓名= TextBox2.Value
部门= TextBox3.Value
Range("A1").End(xlDown).Offset(1,0).Value = 工号
Range("A1").End(xlDown).Offset(0,1).Value = 姓名
Range("A1").End(xlDown).Offset(0,2).Value = 部门
End Sub
实现效果:

细心的你,看到这里,一定能发现一个问题。那便是:点击按钮后里面的文字并没有清空,还残留在上面,这时如果不小心多点击了一次,将导致重复的数据出现。
有问题不可怕,可怕的是忽视问题。解决这个问题很简单,我们只需要在程序中执行值的传递后,将文本输入框的内容设为空值即可。
代码
Pricate Sub CommandButton1_Click()
工号 = TextBox1.Value
姓名= TextBox2.Value
部门= TextBox3.Value
Range("A1").End(xlDown).Offset(1,0).Value = 工号
Range("A1").End(xlDown).Offset(0,1).Value = 姓名
Range("A1").End(xlDown).Offset(0,2).Value = 部门
TextBox1.Value = “”
TextBox2.Value = “”
TextBox3.Value = “”
End Sub
实现效果:

最后只剩下退出按钮没有功能了,对于退出按钮,我们想实现的效果是:点击退出按钮后整个窗体消失。
来来来,又到了英文时间,窗体消失,也可以表现为窗体隐藏。那么语句就很简单,窗体名称加上点号再加上Hide(隐藏)(窗体名称.Hide)
双击【退出按钮】进入代码编写区域,编写隐藏窗体语句
代码
Pricate Sub CommandButton2_Click()
表单录入.Hide
End Sub
实现效果

现在我们将先开始在表格上设计的蓝色按钮与窗体程序联系起来,回到窗体练习模块中将原先的代码删除掉,替换为显示窗体代码,即窗体名称加上点号再加上Show(窗体名称.Show)
代码:
Sub 窗体练习()
窗体名称.Show
End Sub
演示效果:

好!现在大功告成,很不错哦!给你鼓个掌👏👏👏~
不过,整个程序中还存在一些问题,比如不能自动查重也不能出现联想。但是,作为初学者做到这步很不错啦~俗话说,每天一小步,人生一大步。继续加油啦。
下一期中,我们将学习更多VBA知识,掌握循环语句与条件语句。下期再见!