分享

【收藏备用】VBA错误合集及调试技巧

 VBA说 2020-04-07

学习VBA有时候会有一个阶段:一看代码就会,一写就错的感觉。

归根到底还是眼高手低,对于代码不熟练。真正的勇士都是从一次一次的错误中总结经验,慢慢的减少代码错误。所以积累一些VBA错误提示及解决方法还是很有必要的。

而对于出错提示,VBA不太人性化,一般只会惜字如金的提示一下。一般都要进行调试看下具体错误所在的行数,来有针对性的修改代码。

▍常见错误总结

错误通常都会有规律可循,我们就来总结一下VBA中经常出现的错误提示。接好了各位!

Top1:   Next没有For / 块if没有End if

这种错误就是循环语句没有写完全,这种错误在循环嵌套比较多的时候很容易出现。

我在想。if循环缺少结尾,你提示没有For干什么

If循环缺少endif语句

Top2:   子过程或函数未定义/方法和数据成员未找到/要求对象

这种错误一般是代码语句拼写有误造成的,解决方法只能是多敲代码,加强记忆。比如下面的情况。

replace函数拼写错了

Worksheets拼写错了,这个必须记下来!

Workbooks拼写错了,我不止一次犯错!

Top3:   参数不可选

这种错误一般就是函数或者方法,必要的参数没有写全。

replace函数的必要参数没写全,把abc中的a替换为b应该写成replace("abc","a","b")

Top4:  下标越界

这种错误一般是代码中的某些值超过了允许的范围,例如:

当前工作簿中没有“你好”这个工作表

这么定义数组arr(5),最大下标是5,写6会提示下标越界

Top5:  溢出

当变量赋值超过变量的范围的时候,会提示溢出错误

整型取值范围是-32768 到 32767 之间,i赋值70000,超过数据类型范围,提示出错

Top6:  错误1004:方法Range作用于对象_Global时失败

Range("A1:H")缺少H列的行号

Top7:  对象不支持该属性或方法

这种错误顾名思义,就是对象的属性用错。

隐藏行应该用Rows(1).Hidden = True,对Worksheet隐藏用Visible属性

Top8:  对象变量或者With变量未设置

Find方法没有找到值为1的单元格,Rng为空。为了避免这种情况,一般加一句判断的代码:if not Rng is nothing

Top9:  缺少:表达式

with...endwith结构,缺少必要表达式

好多,先列举这几个常见的...

▍常见错误总结常用调试方法

谁都不能保证程序写一遍完美运行,好的调试及自我发现错误纠正的习惯。对VBA代码完美运行也很重要。

我最常用的就是:F8+本地窗口(或Debug.Print+立即窗口)+断点

F8:逐步运行(笔记本有的是Fn+F8)

本地窗口:随时查看变量的赋值情况

断点:当代码及循环较多,打断点可以让程序直接运行到你出错位置前面,再对出错语句F8逐句进行调试。

本地窗口实例:通过本地窗口,我们看到Rng的值为nothing,说明没有返回查找到的对象,报错。

F8+断点实例:要循环将近100次,不可能一直F8调试,这个时候就要加断点。让程序运行到断点处。再往下调试。

当然还有其他调试方法,加Stop语句,Err捕获错误值等,不太常用。本文只介绍上面的方法,有兴趣的可以自己翻阅资料学习。

    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多