VBA常用情景整理
VBA简介
VBA是Visual Basic for Application的缩写,通俗说就是用VB对程序进行控制,使用户可以自行去定义属于自己需求的软件成为可能性。它主要能用来扩展Windows的应用程序功能,特别是Microsoft Office软件。也可说是一种应用程序视觉化的Basic 脚本。该语言于1993年由微软公司开发,实际上VBA是寄生于VB应用程序的版本。微软在1994年发行的Excel5.0版本中,即具备了VBA的功能。
VBA 编程
最近接触到了EXCEL 中的 VBA 编程,将在本阶段稍作整理。
说明
- 若要保存 宏代码 ,Excel 文件格式要选择“ 启用 宏的工作薄” 切记切记!
- 打开带宏的工作薄,默认不启用宏,如果要运行需要先点击启用宏
- 遇到不会写的代码,可以使用录制宏的功能
启用宏
- 路径: 文件->选项->自定义功能区,勾选”开发工具“(如果没有,说明版本不支持),如下图所示:
语法
代码注释 :使用小写的单引号 “ ’ ”
定义变量: 可以 使用Dim 变量名 数据类型 , 也可不定义直接使用
循环
For i = start to end
代码块
Next
判断
'格式如下,可以有多个ElseIf,条件为真执行Then后的代码块,执行完结束,
'如果为假继续执行ElseIf中的条件判断,如果条件都为假,则执行Else后的代码块
'Else和ElseIF为非必填项,最简单的代码:If 条件 Then 代码 End If
If 条件 Then
代码块
ElseIf 条件 Then
代码块
Else
代码块
End If
调试
在调试阶段,我们需要明确几个概念:
- 立即窗口, 所见即所得。局限性:显示的是执行结束后的全部结果,一般需要配合 debug.print等使用
- 本地窗口,显示变量的值。但是一般需要配合stop语句断点前查看
- 监视窗口,自定义想要监视的变量,需要配合能中断程序的方法一起使用
立即窗口
- 立即窗口 代码和模块代码,变量,独立,没有任何关系
- 立即窗口(按Ctrl+G或菜单选择),除了显示debug.print的执行结果外,在调试期间在立即窗口还可以直接输入语句,按回车后显示语句的执行结果,也可以用* ?变量名* 来显示变量的值。举个离子,若有变量str,那么便可以
- ?str
?left(str,5)
本地窗口
运行时会显示内容
代码运行结束后,便会停止
若要实现,运行时,亦显示本地窗口,只需要在结束前,加一句stop
监视窗口
对需要监视的变量,点右键“添加监视”
如何调试VBA 程序
裤裆里着火–裆燃是 逐句执行,需要按F8,F5 立即执行,F8 分步骤执行
设置断点
加入stop语句 + 查看本地窗口, 监视窗口等
stop语句
- 在代码中写stop 可以方便的查看,本地窗口里的 跟踪的变量的值
- stop停止,查看内存中的断点,否则看不到
- 本地执行,执行过程中才显示
- 执行完成了就清除本地窗口------要加断点 + 监视窗口才可以实现
异常处理
在VBA代码中并没有 try catch
异常处理语句,但有one error
语句,和try-catch
功能类似
异常处理方法分类
语法 | 功能 |
---|---|
on error GoTo 0 | 默认报错,和不使用该语句报错情况相同 |
on error Resume Next | 出现异常后忽略异常,继续执行吓一跳语句 |
on error goto[标志语句] | 出现异常后,跳转到标志语句位置运行出错后的处理的语句 |
resume | 运行完出错后处理的语句 |
exit sub | 异常监测结束,选择性退出过程执行 |
异常处理方法使用
On Error GoTo 0
默认的异常处理方法,该异常处理语句和不使用该语句的报错情况相同,如下图对比:
1、无异常处理的默认情况下
2、加入异常处理语句
on error Resume Next
出现异常后会忽略异常,继续执行下一条语句
on error goto [标志语句]
当该语句控制区域代码出现异常时,不会将错误显示出来,而是继续执行标志语句后面的代码,具体如下:
而且可以在标志语句后面添加报错的具体信息:
on error goto [标志语句]/Exit sub
Exit sub
立即退出,不在执行Exit sub后面的代码。一般与on error goto []
搭配使用,具体使用如下:
①、出现错误:
②、未出现错误
on error goto[标志语句]/resume [标志语句]
在执行完异常处理后,如果有需要继续返回到源代码中继续执行异常语句下面代码的情况,采用 resume[标志语句]
,具体实现代码如下:
Sub test()
On Error GoTo ErrorHandle
Dim num1, num2
num1 = 12
num2 = num1 / 0
MsgBox num2
Continue:
num1 = num1 / 4
MsgBox num1
Exit Sub
ErrorHandle:
MsgBox "错误代码: " & Err.Number & vbCrLf & _
"错误描述: " & Err.Description & vbCrLf & _
"错误来源: " & Err.Source, vbCritical
num2 = 0
Resume Continue
End Sub
执行时会先出现一个错误信息框
点确定后会弹出第二个框
多个异常处理语句的使用
在代码中可以设置多个异常处理的语句,在两个控制语句之间的代码的监测权在上面异常处理语句
Sub test()
On Error GoTo ErrorHandle
num2 = 5 / 0
NextLogic:
On Error Resume Next
num2 = 5 / 0 + 5
num2 = 6
MsgBox num2
Exit Sub
ErrorHandle:
MsgBox "错误代码: " & Err.Number & vbCrLf & _
"错误描述: " & Err.Description & vbCrLf & _
"错误来源: " & Err.Source, vbCritical
Resume NextLogic
End Sub
执行时先显示一个error message
点确定后,会执行NextLogic中的代码