Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 3852|回复: 2

[分享] 【烟花原创】VBA零基础之第97篇 VBA错误处理(一)

[复制链接]
发表于 2014-2-13 23:16 | 显示全部楼层 |阅读模式
本帖最后由 hwc2ycy 于 2014-2-14 00:08 编辑

VBA入门从第一篇到现在,咱们已经聊了很多,相信有些童鞋也有一直在动手写代码。
在使用代码的过程中肯定会碰到不少的错误。
代码的错误主要分为两种:

1.编译错误
在代码运行之前编译器对代码编译时所检测到的错误。
点击菜单调试编译VBProject(L)即可对代码进行编译。
97-1.jpg
当然这步不是必需去操作的,因为在运行代码前,编译器会自动进行编译处理的。              
例如下图,把range拼成了ranges
97-2.jpg

编译错误的代码均会被选中以高亮显示(默认情况下蓝底白字),这类错误也是非常容易解决的。

2.运行错误
故名思议,也就是代码在运行的过程中所产生的错误。
这就有点像是代码中不小心给埋下的地雷,一个不留神就踩雷了。
当然大家也不要谈蛇色变,杯弓蛇影。
例如下图中的代码,给整型变量赋值,这个值超过了整型变量所能承受的的值范围。
97-3.jpg

我们讲的错误处理也是以运行错误为切入点进行讲解。
当代码在运行的过程中,错误产生后,对于错误的捕获是VBE进行处理的。

VBE会根据代码中的错误处理机制(如果有的话)进行相关的操作。
如果没有相应的错误处理机制则会以对话框的形式告知用户当前所产生的错误,待使用者对对话框做出响应。
所以错误处理的第一步是要在代码中建立一种错误处理机制。
这个机制主要是通过On Error语句来确定。

A.On Error Resume Next
当一个运行错误发生时,控制转到紧接着发生错误的语句之后的语句,并在此继续运行。
这个语句应用得比较多,可以直接忽略任何的错误(不会弹出对话框),但是不代表不能对错误进行处理。
有个设置可以影响到建立了这种忽略机制后是否还会再次弹出系统的错误消息框。
97-5.jpg
点击菜单工具选项,在选项对话框里切换到通用页即可找到。
确保错误捕获选项是勾选的第三项(上图中红色标记项)
例如:
Dim sht As Worksheet
Set sht = Worksheets("test")
上面的代码在当前工作表中如果没有test工作表时则会产生下标越界的错误。
97-4.jpg
对于使用者来说,这是一个糟糕的现象。
万一用户是个VBA盲,是点结束还是调试试,人家也会丈二和尚摸不着头脑
稍微修改下:
Dim sht As Worksheet
On Error Resume Next
Set sht = Worksheets("test")
If sht Is Nothing Then
   MsgBox "当前工作簿中没有test工作表" & vbCr & "代码结束运行"
   Exit Sub
End If

这样以明确的方式告知用户当前所产生的错误,并且结束当前的代码执行。
不需要再让用户做二选一的选择。
但是需要注意的是On error resume next也不要滥用。
在调用另一个过程时,On ErrorResume Next 语句成为非活动的,所以,如果希望在例程中进行嵌入错误处理,则应在每一个调用的例程中执行 On Error Resume Next 语句。
下面的测试代码大家可以F8单步测试。

Sub test()
On Error Resume Next
Dim sht As Worksheet
Set sht = Worksheets(19)
On Error GoTo 1
Call test2
Call test3
Call test4
Exit Sub
1:
MsgBox "test"
End Sub

Sub test2()
On Error Resume Next
Dim sht As Worksheet
Set sht = Worksheets(20)
MsgBox sht.Name
Exit Sub
2:
MsgBox "test2"
End Sub
Sub test3()
On Error GoTo 3
Dim sht As Worksheet
Set sht = Worksheets(20)
MsgBox sht.Name
Exit Sub
3:
MsgBox "test3"
End Sub

Sub test4()
On Error GoTo 0
Dim sht As Worksheet
Set sht = Worksheets(20)
MsgBox sht.Name
End Sub
发表于 2014-6-18 13:42 | 显示全部楼层
回复

使用道具 举报

发表于 2014-6-19 13:45 | 显示全部楼层
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-5-2 14:14 , Processed in 0.265769 second(s), 8 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表