需求才是学习的第一生产力,学习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 NextEnd Sub