mathtype运行时错误48_Excel VBA解读(163):错误处理技术之概述

学习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所示的错误消息。

30e3df456c3b6ca4658a0193700f6324.png

图1

编译错误

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

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

2.For语句没有Next

3.Select语句没有End Select

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

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

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

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

ce8094800f7bef69a58bed550dae0346.png

图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会忽略错误处理代码。

3802142db759cf1cd7e93ff80ea033b9.png

图3

0d33c61b9e7f8aee15802a5d6f412110.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值