需求才是学习的第一生产力,学习VBA是因为要帮测试同学解决excel中的值校验问题。具体来讲,需要对指定单元格做数据格式校验,必须是json,不是json或者格式不对的,要有提示。
解决问题的方案很多,可以写个python脚本,本地执行(测试同学说没有python环境)。也可以在工具工程中,增加一个接口,长传文件做校验。但我觉得上述的方案都太重,如果excel本地就能解决自然是最好的。
OK,那就进入正题,看看是怎么解决的。主要有两步,第一步是基本的宏(VBA)的创建和使用,第二步是具体的执行代码编写。
第一步,宏(VBA)的创建和使用
1、先在页面上创建一个命令按钮,后续点击这个按钮就可以触发宏
2、点击查看代码,编写代码(红框为编写的代码)
不熟悉代码的,可以先写个
Private Sub CommandButton1_Click()
MsgBox "弹窗,测试"
End Sub
3、保存&运行
第二步,json格式校验代码编写
先吐槽VBA,这个语言和笔者一样大的年纪,是真的难用。网上的资料也比较零碎,估计在这个任务之后,非特殊情况也不会再尝试VBA了。
OK,直接上代码。
Private Sub CommandButton1_Click()
'定义变量'
Dim aa, y As Object
'错误定义,遇到错误不会报错,而是继续执行后续代码'
On Error Resume Next
'打印当前选择的单元格的列数'
MsgBox (ActiveCell.EntireColumn.Column)
col = ActiveCell.EntireColumn.Column
'定义一个对象,并设置为js语言,可以使用对应的函数'
Set x = CreateObject("ScriptControl"): x.Language = "JScript"
'循环对选中列的每个单元格对校验,从第二个开始,第一个是表头'
For i = 2 To UsedRange.Rows.Count
aa = Cells(i, col)
If IsEmpty(aa) Then
'为空跳过,因为VBA没有continue关键字,只能用嵌套if语句实现判断跳过'
Else
If x.eval("eval(" & aa & ")") Is Nothing Then
'MsgBox Cells(i, col), , "对象为空"'
'json格式异常,单元格颜色改为红色'
Cells(i, col).Interior.Color = RGB(255, 0, 0)
Else
'MsgBox Cells(i, col), , "对象有值"'
'单元格格式正常,改回正常白色背景颜色'
Cells(i, col).Interior.Color = RGB(255, 255, 255)
End If
End If
Next
End Sub