他们老师需要把好几百个学生的月考成绩信息录入到excel表里,方便后续的整理分析。
问题
通过常规的输入,他们经常会遇到未按要求录入的问题,如:
1、粗心导致语数外分数不在0-100范围,体育成绩不在0-30范围;
2、有部分信息遗漏未录入;
3、输入错行,将原有的数据覆盖;
......
除了这些,每输入一行数据,需要用鼠标点击到下一行,再进行录入,这样也比较浪费时间、很繁琐。
这些问题说起来也不是什么大问题,但是就是很繁琐,对效率很有影响,有没有好的办法改进一下?
操作演示
其实,这个完全也可以用vba来解决,当然为了解决上面这个问题,这次要添加一个窗体,可以理解为一个录入数据的窗口,通过这个自定的窗口把数据输入到表里面去。
为了更清楚直观的看到效果,永恒君录制了一小段视频,大家先看看效果:
很显然,通过这个设计只需要专注输入的内容,全程只需要键盘即可完成操作。
这样很大程度地避免没有信息输入、录入不符合要求的数据(语数外分数一定为0-100,体育成绩一定是0-30)的情况,提升不少效率。
解决思路
关于vba窗体设计本身,没有太多的难点,就是和堆积木一样把元素添加进去就好了,如下图:
稍微难一些的就是事件的代码,比如:
如果没有内容,则要提示"请务必输入姓名、成绩信息!"
If TextBox1.Text = "" Or TextBox2.Text = "" Or TextBox2.Text = "" Or TextBox2.Text = "" Then
MsgBox "请务必输入姓名、成绩信息!"
Exit Sub
End If
如果语文成绩超出范围,则提示请输入0-100之间的数字。
If TextBox2.Text < 0 Or TextBox2.Text > 100 Then
MsgBox "语文成绩请输入0-100之间的数字!"
TextBox2.Text = ""
TextBox2.SetFocus
Exit Sub
End If
窗体内输入完成后回车,成绩直接录入到excel表格中。输入完一个学生的成绩,按回车即可输入下一个。
r = [B65536].End(xlUp).Row + 1
Cells(r, "A") = Cells(r - 1, "A") + 1
Cells(r, "B") = TextBox1.Text
Cells(r, "C") = TextBox2.Text
Cells(r, "D") = TextBox3.Text
Cells(r, "E") = TextBox4.Text
Cells(r, "F") = TextBox5.Text
===
Private Sub TextBox5_KeyDown(ByVal KeyCode As MSForms.ReturnInteger, ByVal Shift As Integer)
If KeyCode = 13 Then
Call CommandButton1_Click
TextBox1.SetFocus
End If
End Sub
把上面代码和上面的窗体组合起来即可实现效果。
永恒君已经把源文件准备好,需要的话在微信公号后台回复「录入」即可。
你也可以在公号里「精华整理」-「VBA实例」进行查看更多vba实例,提高工作效率。
Excel vba 实例(18) - 一键将单列长数据平均拆成多列
微信公众号:永恒君的百宝箱
个人博客:www.yhjbox.com
转载请注明:永恒君的百宝箱 » Excel VBA 实例(21) – 如何快速准确录入数据