excelvba开启失败(EXCELVBA学习笔记错误处理语句)

编写代码总会出现意想不到的错误,VBA中对这些错误有怎样的功能提供给代码编写者?

一、On Error Resume Next 忽略错误继续执行语句下一条。此语句执行后,其后面的语句产生的错误都会被忽略(且不会给出任何提示),坚定地继续执行下一语句。如果有Do Loop循环语句,极易产生死循环。所以此语句用起来最简单,但也极易产生大问题。

二、On Error Goto “标签” VBA提供的更为良性的错误处理语句。发生错误后跳转到“标签”的语句,标签后面的语句写上应对不同错误的代码。那么怎么知道出现的错误是哪个类别的呢?

VBA提供了1个Err 对象。Err 对象 代表最近一次发生的程序运行时的错误。

Err.Number 属性:指错误代码。就是下图中的“13”。

excelvba开启失败(EXCELVBA学习笔记错误处理语句)(1)

VBA的错误都有类似的代码,只是同样的错误代码,有时指示的意思有很大差别,让人很难搞清是哪里的代码出问题了。Err.Number 是个可写的属性,可以Goto 到错误处理语句,执行完语句后,将Err.Number=0 0代表没有产生错误,大于0就表示有错误产生。

Err.Description 属性:该错误的描述。如上图的“类型不匹配”,此描述对于判断错误原因基本没什么用。

Err.Clear 方法:将Err的内容清空。

例句:

On Error GoTo wrong n = 0 \ 0 '执行此句,会产生错误,就会跳转到wrong: 标签。因上面语句,不会产生弹窗。 Exit sub '此句用于隔离 错误处理语句与主语句。避免主语句执行完后,还要运行错误处理语句 wrong: IF Err.Number > 0 Then Msgbox “产生了未知的错误,请检查” End if Resume Next '返回产生错误的语句,并执行其下一条语句

三、On Error Goto 0 恢复默认的VBA处理错误的方式,即弹出错误提示,并中断程序运行。

下面介绍几种错误的产生原因,及处理办法:

1、类型不匹配,错误代码“13”

excelvba开启失败(EXCELVBA学习笔记错误处理语句)(2)

(1)赋值与声明类型不符合。在数组应用中,此错误极易遇上。

dim arr() As String arr = Range("A1:B2") '此时会产生 类型不匹配 错误 //单元格赋值给数组时,不可以对arr() 声明具体类型。只能 Dim arr() 或 Dim arr() As Variant,就是变体类型,否则必报“13”号错误。 //因为VBA认为单元格里会存储任何类型的数据(不管现在单元格里实际存储数据的类型),所以对接的变量也应该具有任何类型。

(2)但是在下面示例中,又必须声明为具体的类型

excelvba开启失败(EXCELVBA学习笔记错误处理语句)(3)

需要 Dim arr() As String 。更好的解决办法,Dim arr ,将arr 声明为变体变量,对于声明为数组适用性更广。

(3)用For Each 循环中。For Each s In "集合",不管这个集合的数据具体是什么类型,变量s 都要是变体类型的。否则报"13"错。

2、 错误代码:91。描述:对象变量或With块变量未设置。原因(1)赋值时没写SET。将对象赋值给变量时,前面需写上Set 。

(2)引用了“空对象"。如:Dim sh1 as Worksheet sh1.range("A1")=0

Dim sh1 as Worksheet sh1.range("A1")=0 '这里会报错,因为sh1还没被赋值,是个空对象

3、 错误代码:1004。描述:无具体说明。原因:向Excel发出了不能完成的指令。

例:Cells(i,1).value=0 如果i值为0,Excel根本没有0行,所以报错。要注意变量的值是否可能为0。

例2:

Sheets(1).Activate Sheets(2).Range("B2")=10 '此句没有问题 Sheets(2).Range(Cells(1,1),Cells(3,3)).Value=9 '此句会报 1004 错。 //要写成 Sheets(2).Range(Sheets(2).Cells(1,1), Sheets(2).Cells(3,3)).Value=9

这是因为VBA会将Cells()单元格,认为是当前激活状态下工作表的Cells(),于是就产生了错误。

在跨工作表复制时,虽没报错,但常有这种混乱产生。

,

免责声明:本文仅代表文章作者的个人观点,与本站无关。其原创性、真实性以及文中陈述文字和内容未经本站证实,对本文以及其中全部或者部分内容文字的真实性、完整性和原创性本站不作任何保证或承诺,请读者仅作参考,并自行核实相关内容。文章投诉邮箱:anhduc.ph@yahoo.com

    分享
    投诉
    首页