![]() |
1
92
VBA中的错误处理
这个
错误处理例程中的错误正在终止。
范围513-65535可用于用户错误。
对于自定义类错误,可以添加
对于未实现的接口成员
衍生的
类,应使用常量
|
![]() |
2
33
我还要补充一点:
只是为了好玩:
|
![]() |
3
16
所以你可以这样做
如果您想在自定义异常中烘焙。(例如,违反业务规则的)使用上面的示例,但根据需要使用goto更改方法的流程。 |
![]() |
4
11
这是我的标准实现。我喜欢标签是自我描述的。
或者,用
|
![]() |
5
4
Professional Excel Development 有一个相当不错的 error handling scheme .如果你想在VBA上花点时间,那本书可能值得一读。有许多领域缺乏VBA,本书对管理这些领域有很好的建议。 PED描述了两种错误处理方法。主要的是一个系统,其中所有入口点过程都是子过程,所有其他过程都是返回布尔值的函数。 入口点过程在错误语句上使用几乎与设计的一样来捕获错误。如果没有错误,则非入口点过程返回true;如果有错误,则返回false。非入口点程序也在出错时使用。 这两种类型的过程都使用中央错误处理过程来保持错误状态并记录错误。 |
![]() |
6
3
我使用一段我自己开发的代码,这对于我的代码来说非常好: 在函数或子函数的开头,我定义了:
然后,我处理可能的错误
|
![]() |
7
3
这是一个相当不错的模式。 调试:当出现错误时,按ctrl break(或ctrl pause),将break marker(或它调用的任何内容)向下拖动到继续行,按F8,您将进入“抛出”错误的行。 存在者就是你的“最终”。 沙漏每次都会被杀死。 状态栏文本将每次清除。
它还捕获DAO和VBA错误。如果要对特定的错误号进行补漏白,可以在“VBA错误”部分中放置一个选择大小写。
|
![]() |
8
2
下面的代码显示了一个备选方案,确保子/函数只有一个出口点。
|
![]() |
9
2
与讨论相关的是相对未知的
这个
笔记:
在循环中放置行号标签时要小心。例如,
如果下面的代码是行标签
在程序中正确放置行标签对于使用
网络上有任意数量的自由实用程序,它们会自动在过程中插入数字行标签,因此在开发和调试过程中,您可以获得细粒度的错误信息,然后在代码上线后删除这些标签。
如果代码在发生意外错误时向最终用户显示错误信息,请提供
|
![]() |
10
1
我个人对本主题前面所作声明的看法:
我正在使用
当我这样做的时候,我添加了一个全局变量
当我交付我的工作时,我将变量设置为false,从而只向用户隐藏错误并在测试期间显示它们。 在执行可能失败的操作(如调用可能为空的ListObject的DataBodyRange)时也使用它:
而不是:
或检查集合中是否存在项:
|
![]() |
11
1
|
![]() |
12
1
我发现以下方法最有效,称为中央错误处理方法。 效益您有两种运行应用程序的模式: 调试 和 生产 . 在 调试 在模式下,代码将在任何意外错误处停止,并允许您通过按两次F8键跳到发生错误的行来轻松调试。在 生产 模式,将向用户显示有意义的错误消息。 您可以抛出这样的故意错误,这样会停止代码的执行,并向用户发送一条消息:
实施
您需要用下面的页眉和页脚“包装”所有带有大量代码的子例程和函数,确保指定
中央错误处理程序模块的内容如下:
把自己放在 调试 模式,在即时窗口中运行以下命令:
|
![]() |
CPS · 当变量值为空时,在另一个变量中赋值 2 年前 |
![]() |
xris23 · 通过VBA选择命名范围,让用户直接编辑单元格 2 年前 |
![]() |
Stormer · 从Access格式化Excel单元格无效 2 年前 |
![]() |
j johns · 通过VBA将ascii art添加到命令提示符 2 年前 |
![]() |
BinaryCat · Excel-将单元格转换为具有成对数据的行 2 年前 |
![]() |
Waleed · 以下拆分函数的(0)表示什么? 2 年前 |
![]() |
smrmodel78 · VBA创建表格未选择正确的范围 3 年前 |