首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Excel VBA解读(163):错误处理技术之概述

Excel VBA解读(163):错误处理技术之概述

作者头像
fanjy
发布2020-01-13 17:25:37
3.7K0
发布2020-01-13 17:25:37
举报
文章被收录于专栏:完美Excel完美Excel

学习Excel技术,关注微信公众号:

Excelperfect

在VBA代码中,我们经常会看到类似于On Error Resume Next这样的语句,这是编译器在代码遇到错误时自动处理的语句。有时候,在代码中进行适当的错误处理,可以使代码在实际应用后更健壮,避免由于各种原因导致的代码异常给用户带来的困扰。

下面是一些常用的错误处理语句:

On Error Goto 0

当发生错误时,代码停止运行并显示错误。

On Error Goto -1

清除当前错误设置并恢复为默认值。

On Error Resume Next

忽略错误,代码继续运行。

On Error Goto [标签]

当发生错误时,跳转到指定的标签处执行。

Err对象

当发生错误时,存储错误信息的对象。

Err.Number

错误编号。可以在需要检查发生指定错误时使用。

Err.Description

描述错误的文本。

Err.Source

在使用Err.Raise时填充。

Err.Raise

允许生成自已的错误。

Error函数

从错误编号返回错误文本。

Error语句

模拟错误。已使用Err.Raise代替。

概述

错误处理是指为处理应用程序运行时发生错误而编写的代码。这些错误通常是由编写代码的人无法控制的事情所引起,例如文件丢失、数据库不可用、数据无效等。

如果认为某种情形下可能发生错误,那么最好编写特定代码以处理这些可能的错误。而对于所有其他错误,使用通用代码进行处理。这就是VBA错误处理语句起作用的地方,它们使我们的应用程序能够优雅地处理所有意外错误。

VBA的错误类型

在VBA中,有3类错误:

1.语法错误

2.编译错误

3.运行时错误

使用错误处理来处理运行时错误。

语法错误

当一行代码输入完成后按下回车键时,VBA会评估其语法是否正确,如果不正确,将显示一条错误消息。

例如,在输入If语句时忘记了Then,VBA将显示下图1所示的错误消息。

图1

编译错误

在编译所有代码时发现的语法错误,例如:

1.If语句没有相应的End If语句

2.For语句没有Next

3.Select语句没有End Select

4.调用的Sub过程和Function过程不存在

5.使用错误的参数调用Sub过程和Function过程

6.在要求声明变量时未声明变量

下图2所示,当If语句没有对应的End If语句时,如果运行代码就会发生编译错误。

图2

在编写代码时,我们可以经常运行菜单栏中的“调试—编译”命令,及早发现编译错误。如果菜单“调试”下的“编译”命令为灰色,表明代码不存在编译错误。

运行时错误

程序运行时会发生运行时错误。它们通常不在控制范围内,但也可能是由于代码中的错误引起。例如,假设代码要从外部工作簿中读取数据,但该工作簿文件不存在,当代码尝试打开该工作簿读取数据时会发生错误。还有一些常见的运行时错误,包括数据库不可用、用户输入无效数据、使用的单元格内容应为数字但实际上是文本,等等。

正如我们所看到的,错误处理的目的是处理运行时发生的错误。

当认为可能发生运行时错误时,可将代码放置在适当的位置来处理它。例如,通常会将代码放置在适当的位置以处理未找到的文件。

下面的代码在尝试打开文件之前检查文件是否存在。如果该文件不存在,则会显示一条对用户更友好的消息,并且退出过程。

Sub OpenFile()

Dim strFile As String

strFile = "C:\data.xlsx"

' 使用Dir检查文件是否存在

If Dir(strFile) = "" Then

'如果文件不存在则显示消息

MsgBox "不能找到文件: "& strFile

Exit Sub

End If

' 如果文件存在则执行下面的语句

Workbooks.Open strFile

End Sub

当认为某种情形可能发生错误时,最好添加代码来处理这种情况。我们通常将这些错误称为可预见的错误。如果没有特定的代码来处理错误,则将其视为意外错误。我们使用VBA错误处理语句来处理意外错误。

这里需要说明的是,有一类错误,代码能够正常运行,但结果不符合要求,这是由于编写代码时误输入造成的,例如本来应该是:

result= a + b

结果代码输入成了:

result= a * b

此外,在使用错误处理过程之前,应该设置VBA选项“遇到未处理的错误时中断”选项,如下图3所示。如果选取“发生错误则中断”选项,那么VBA会忽略错误处理代码。

图3

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-01-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 完美Excel 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档