论文部分内容阅读
【摘 要】在EXCEL中如何修改VBA代码,来达到快速录入数据的目的。
【关键词】数据录入;代码;单元格;change事件
每一个学期初和学期末,都有许多数据需要采集和上报,这此数据在录入过程中不仅耗费了大量的时间,还很容易出错,如图1所示的学生情况信息表,在通常情況下,我们会逐条录入这些数据的,也有的同志会通过自定义单元格格式等技巧来提高自己的录入效率,但我想看过本人为您介绍的录入技巧后,您一定会大有收获。
图1 学生情况信息表
一、案例分析
不难发现在“编号”字段中(第一列),每位学生的编号前四位是相同的,即“2012”,所不同的是后面的班级和学号不同,如果我们在输入过程中前四位可以自动添加进去,那就方便多了。
对于学生姓名没有规律性,所以“姓名”列(第二列)中内容只能是一个一个录入了,没有办法“偷懒”。
在出生年月一列(第三列)中,如果我们只输入数字,就能显示年月日那样就会省事多了,如我输入“19941008”,按回车键后,系统就显是“1994年10月8日”。
在性别列(第四列)中,只有“男”或“女”的填充可能,如果我们能够按数字键1就显示“男”,按数字键2就显示“女”,那不是“太美”了嘛。
在“毕业学校”一列中(第五列)中,因为我们的学生来源只有五所中学,所以如果能做成下拉列表形式,我们只要在里面选择一下就可以了。
至于最后列“政治面貌”列,只有两种可能,即团员和非团员。所以做成性别列,类似就可以了。
二、实现方法
通过对上述分析,我们不难发现,数据中的1、3、4、6列中的数据都要是用户输入后由系统自动进行转换的,我们可以通过表对象中的Change事件编程来实现。数据的第5列是通过选中某个单元格对象再进行选择操作的,只需对工作表的SelectionChange来编写代码,操作步骤如下:按Alt+F11组合键打开VBA编辑器,双击窗口左侧的Sheet1对象,在其右侧的代码窗口中对工作表对象的Change事件和SelectionChange事件分别编写VBA代码。
Private Sub Worksheet_Change(ByVal
Target As Range)
On Error GoTo Error
‘设置陷阱
Select Case Target.Column
Case 1
Target.NumberFormatLocal="""2012"
"0000"
‘第一列自动套用格式在单元格数字前加2012
Case 3
Target.NumberFormatLocal=”0000””
年””00””月””00””日”””
‘第3列将输入的8位数更改为年月日格式
Case 4
If Target.Value=1 Then
Target.Value=”男”
Else
If Target.Value=2 Then
Target.Value=”女”
End If
End If
‘第4列输入1即显示为男,输入2显示为女
Case 6
If Target.Value=3 Then
Target.Value=”团员”
Else
If Target.Value=4 Then
Target.Value=”非团员”
End If
End If
‘第6列输入3即显示为团员,输入4显示为非团员
End Select
‘出现错误时退出程序
Error:
Exit Sub
End Sub
在Change事件中,主要是通过Select case/end select分支结构判断用户在哪一列中输入数据,在EXCEL中的A列为1,B列为2,以此类推,然后再转换为相应的分支结构语句中去执行相应的代码,完成后退出整个分支结构。
第五列即毕业学校列,我们通过下拉菜单来实现:
Private Sub worksheet_selectionchange(ByVal target As Range)
On Error GoTo Error
If target.Column=5 Then
Application.SendKeys"%{down}"
‘自动打开下拉菜单,设置第五列的数据有效性为序列填充
target.Validation.Add Type:=xlValidateList,Formula1:="市一中,市二中,省实验中学,市三中"
End if
Error:
Exit sub’
End sub
在Selectionchange事件中,首先通过判断语句判断当前选中是否为第三者列,即毕业学校列,如果是则自动打开下拉菜单,同时显示所选项目的列表,否则退当触发的事件。
以上事件在执行过程中如果出错则自动转到子程序error,退出当前的事件的执行。
三、数据录入测试
为了方便测试,建议大家将“按回车键后插入点的移动方向”改为“向右”,(单击工具菜单中的编辑选项卡进行设置)这样会更加符合我们平时的录入表格的习惯。
在“编号”列中输入学生编号的后四位按回车键,系统将会自动添加前四位2012。
在“出生年月日”列中直接输入8位数回车后,系统会自动在前四位后加“年”,中间两位后加“月”,最后加上“日”。
在“性别”列中,按数字键1,则显示为“男”,按数字键2,则显示为“女”。同样政治面貌一列中,按数字键3,显示为“团员”,按数字键4,显示为“非团员”。
在“毕业学校”一列中,中需单击单元格中的任一位置就可以看到自动弹出的下拉菜单,然后就可以从列表中选择相应的毕业学校。(不需要单击单元格右侧的下拉箭头按钮)
经过这样设计的表格,即使是初学Excel的朋友也会得心就手。如果要几个人协同输入一大批数据,不仅会做到格式上的高度统一,而且会节约很多的时间,同时又成倍的提高了工作效率,何乐而不会呢?在实际运用的过程中,大家可以根据自己的修改代码中相应的属性。需要注意的是,代码一旦编写完成后如果要添加或删除,请及时对代码中的列号进行相应的调整。
作者简介:刘金凤(1968—),女,延边大学经济管理专业毕业,高级讲师,现供职于延边职业技术学院计算机系。
【关键词】数据录入;代码;单元格;change事件
每一个学期初和学期末,都有许多数据需要采集和上报,这此数据在录入过程中不仅耗费了大量的时间,还很容易出错,如图1所示的学生情况信息表,在通常情況下,我们会逐条录入这些数据的,也有的同志会通过自定义单元格格式等技巧来提高自己的录入效率,但我想看过本人为您介绍的录入技巧后,您一定会大有收获。
图1 学生情况信息表
一、案例分析
不难发现在“编号”字段中(第一列),每位学生的编号前四位是相同的,即“2012”,所不同的是后面的班级和学号不同,如果我们在输入过程中前四位可以自动添加进去,那就方便多了。
对于学生姓名没有规律性,所以“姓名”列(第二列)中内容只能是一个一个录入了,没有办法“偷懒”。
在出生年月一列(第三列)中,如果我们只输入数字,就能显示年月日那样就会省事多了,如我输入“19941008”,按回车键后,系统就显是“1994年10月8日”。
在性别列(第四列)中,只有“男”或“女”的填充可能,如果我们能够按数字键1就显示“男”,按数字键2就显示“女”,那不是“太美”了嘛。
在“毕业学校”一列中(第五列)中,因为我们的学生来源只有五所中学,所以如果能做成下拉列表形式,我们只要在里面选择一下就可以了。
至于最后列“政治面貌”列,只有两种可能,即团员和非团员。所以做成性别列,类似就可以了。
二、实现方法
通过对上述分析,我们不难发现,数据中的1、3、4、6列中的数据都要是用户输入后由系统自动进行转换的,我们可以通过表对象中的Change事件编程来实现。数据的第5列是通过选中某个单元格对象再进行选择操作的,只需对工作表的SelectionChange来编写代码,操作步骤如下:按Alt+F11组合键打开VBA编辑器,双击窗口左侧的Sheet1对象,在其右侧的代码窗口中对工作表对象的Change事件和SelectionChange事件分别编写VBA代码。
Private Sub Worksheet_Change(ByVal
Target As Range)
On Error GoTo Error
‘设置陷阱
Select Case Target.Column
Case 1
Target.NumberFormatLocal="""2012"
"0000"
‘第一列自动套用格式在单元格数字前加2012
Case 3
Target.NumberFormatLocal=”0000””
年””00””月””00””日”””
‘第3列将输入的8位数更改为年月日格式
Case 4
If Target.Value=1 Then
Target.Value=”男”
Else
If Target.Value=2 Then
Target.Value=”女”
End If
End If
‘第4列输入1即显示为男,输入2显示为女
Case 6
If Target.Value=3 Then
Target.Value=”团员”
Else
If Target.Value=4 Then
Target.Value=”非团员”
End If
End If
‘第6列输入3即显示为团员,输入4显示为非团员
End Select
‘出现错误时退出程序
Error:
Exit Sub
End Sub
在Change事件中,主要是通过Select case/end select分支结构判断用户在哪一列中输入数据,在EXCEL中的A列为1,B列为2,以此类推,然后再转换为相应的分支结构语句中去执行相应的代码,完成后退出整个分支结构。
第五列即毕业学校列,我们通过下拉菜单来实现:
Private Sub worksheet_selectionchange(ByVal target As Range)
On Error GoTo Error
If target.Column=5 Then
Application.SendKeys"%{down}"
‘自动打开下拉菜单,设置第五列的数据有效性为序列填充
target.Validation.Add Type:=xlValidateList,Formula1:="市一中,市二中,省实验中学,市三中"
End if
Error:
Exit sub’
End sub
在Selectionchange事件中,首先通过判断语句判断当前选中是否为第三者列,即毕业学校列,如果是则自动打开下拉菜单,同时显示所选项目的列表,否则退当触发的事件。
以上事件在执行过程中如果出错则自动转到子程序error,退出当前的事件的执行。
三、数据录入测试
为了方便测试,建议大家将“按回车键后插入点的移动方向”改为“向右”,(单击工具菜单中的编辑选项卡进行设置)这样会更加符合我们平时的录入表格的习惯。
在“编号”列中输入学生编号的后四位按回车键,系统将会自动添加前四位2012。
在“出生年月日”列中直接输入8位数回车后,系统会自动在前四位后加“年”,中间两位后加“月”,最后加上“日”。
在“性别”列中,按数字键1,则显示为“男”,按数字键2,则显示为“女”。同样政治面貌一列中,按数字键3,显示为“团员”,按数字键4,显示为“非团员”。
在“毕业学校”一列中,中需单击单元格中的任一位置就可以看到自动弹出的下拉菜单,然后就可以从列表中选择相应的毕业学校。(不需要单击单元格右侧的下拉箭头按钮)
经过这样设计的表格,即使是初学Excel的朋友也会得心就手。如果要几个人协同输入一大批数据,不仅会做到格式上的高度统一,而且会节约很多的时间,同时又成倍的提高了工作效率,何乐而不会呢?在实际运用的过程中,大家可以根据自己的修改代码中相应的属性。需要注意的是,代码一旦编写完成后如果要添加或删除,请及时对代码中的列号进行相应的调整。
作者简介:刘金凤(1968—),女,延边大学经济管理专业毕业,高级讲师,现供职于延边职业技术学院计算机系。