处理子例程中重复出现的 VBA 错误

2023-12-11

我被困在我有解决方法的事情上,但这让我烦恼我没有关于如何解决使用问题的直接答案On Error Goto对于重复出现的错误。我的问题本质上是一样的正如这个,但是提供的答案是OP整体方法的替代方案,而不是如何处理具体问题。

我在下面简化了一个例子。我是很清楚可能有十几种方法可以重写此代码以避免任何错误 - 我只是用它来说明试图找出问题为什么/如何此代码在 i = 0 时正常工作,但在 i = 3,6,9 时却不能正常工作?

Sub vbaErrorConfusion()
Dim theArray(9) As Long, i As Long

    For i = 0 To 9
        On Error GoTo fixingErrors
        'next line will intentionally create an error when
        'when i = {0} this works as expected, but at i=3 next line throws an error.
        theArray(i) = i + 1 / (i Mod 3)
        On Error GoTo 0
    
next_i:
    Next i

Exit Sub
'----Error Handling----
'this works as expected when i=0 but not when i = 3,6,9
fixingErrors:
    
    Err.Clear
    On Error GoTo 0
    'at this point I would expect my error state to be the same as the start of procedure?
    theArray(i) = -1
    GoTo next_i
End Sub

What my Err变量显示在第一个 0 实例之后。

enter image description here

我跑完之后Err.Clear我希望这种行为i=3与当时相同i=0,但是我的程序因以下 VBA 错误而停止,人们会期望没有任何错误捕获。

enter image description here

我认为有某种方法可以重置Error变量或在没有解决方法的情况下处理这种情况?任何高质量的回复都会得到好评。谢谢。


要告诉 VBA 您已经处理了错误,您需要Resume陈述。因此,更换线路GoTo next_i with Resume next_i你给你你期望的结果。

你不需要Err.Clear. Also, On Error GoTo 0将禁用错误处理程序。然而,这两行都不会告诉 VBA 您已经处理了错误。

在你的代码中i=0错误处理程序被激活,但 VBA 没有被告知错误已被处理(即没有Resume陈述)。在i=3在前一个错误尚未处理的情况下发生另一个错误。在这种情况下,当前过程/函数/属性无法处理第二个错误,因此这是致命的。

您还应该采取On Error GoTo fixingErrors循环外的线。

Sub vbaErrorConfusion()
On Error GoTo fixingErrors
Dim theArray(9) As Long, i As Long

    For i = 0 To 9
        '*On Error GoTo fixingErrors
        'next line will intentionally create an error when
        'when i = {0} this works as expected, but at i=3 next line throws an error.
        theArray(i) = i + 1 / (i Mod 3)
        '*On Error GoTo 0
    
next_i:
    Next i

Exit Sub
'----Error Handling----
'this works as expected when i=0 but not when i = 3,6,9
fixingErrors:
    
    '*Err.Clear
    '*On Error GoTo 0
    'at this point I would expect my error state to be the same as the start of procedure?
    theArray(i) = -1
    Resume next_i
End Sub
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

处理子例程中重复出现的 VBA 错误 的相关文章

随机推荐

  • 从客户端(iOS 和 Android)发送 Socket 请求到 Sails.js 服务器

    我正在尝试将 socket io 与 iOS 和 Android 应用程序一起使用 但这里存在一些问题 我想问一下是否有人真正有解决方案 如何从客户端 iOS Android 发送socket io请求 我认为有适用于iOS和Android
  • web2py 网址验证器

    在 web2by 构建的缩短器中 我想首先验证 url 如果无效 则返回到第一页并显示错误消息 这是我在控制器 mvc arch 中的代码 但我不明白出了什么问题 import urllib def index return dict de
  • Woocommerce 变体产品价格显示默认值

    我的商店设置了产品变体 目前在产品缩略图页面 即类别和过滤页面 上显示 从 xx 到 xx 当进入单个产品页面时 变体被选择为变体价格显示 我将某些属性设置为默认值 这是我希望在类别页面上显示的价格 标准尺寸和成本 但我不知道是否可能或将其
  • Python 错误:“ValueError:需要超过 1 个值才能解压”

    在 Python 中 当我运行这段代码时 from sys import argv script user name argv prompt gt print Hi s I m the s script user name script 我
  • 将单选按钮值插入 mysql

    我创建了一个测试表单只是为了尝试将我的单选按钮值发送到 mysql 我现在遇到了问题 下面的代码只是一个测试 我希望单选按钮提交该值 但事实并非如此 table width 300 border 0 align center cellpad
  • Flutter/Dart 中的 SOAP 请求

    我需要使用 Flutter 向 NET Webservice WSDL 发出 SOAP 请求 该网络服务有一个基本的身份验证 用户 密码 和一些带有预定义信封的服务 所以我尝试创建一个 SOAP 信封 String requestBody
  • 多次购买时会发生什么 - 非续订订阅应用内购买

    我正在实现一个包含应用内购买功能的示例 订阅是非续订类型 自动续费订阅时 如果用户已经购买过 且在有效期内再次尝试购买 iTunes会提示 您已经订阅了购买 并且不会进一步进行 用户可以使用应用程序恢复功能恢复其订阅 但对于非续订订阅类型
  • 是否可以在 FullCalendar 中交替行背景颜色?

    我对 fc agenda slot tr 应用了奇数 偶数类 但问题是左 右 单元格 边框位于下面的 fc agenda days 表上 因此当我设置背景时它不会显示在 fc agenda slot tr 上 FullCalendar 本身
  • CakePHP 使用 saveAll:如何使用 HABTM 链接记录保存额外数据?

    我已经能够使用 CakePHP 的 saveAll 方法同时创建 成员 并将它们注册到 事件 中 创建 HABTM 链接记录 这非常棒 例如 此代码创建两个新的 Members 并将每个人的记录添加到 EventsMember 表中 将它们
  • Android 数字选择器对话框 [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 有没有人有任何对话框允许用户选择一定范围内的数字 这似乎是一个相当普遍的需求 但我找不到它的通用对话框 而且我不想花时间创建自己的对话框 有什么帮助吗 我知道两年多过去了 但答案仍然
  • ruby 如何允许方法和类同名?

    我碰巧正在用 ruby 开发 Singleton 类 只记得它的工作方式工厂女工 他们解决了这个问题 所以你可以同时使用漫长的路 Factory create and 捷径 Factory 我想了想 很好奇他们是如何上课的Factory也表
  • Cygwin编码困难

    不确定这是否是一个编程问题 我开始怀疑是这样 但后来我在 Windows 控制台而不是 Cygwin 控制台中运行了有问题的 Java 程序 可执行 jar 并且它运行良好 输出重音良好 重音输入接受良好 因此以下内容仅适用于 Cygwin
  • kernel.h中min宏中的“(void)(&_min1 == &_min2)”的作用是什么?

    In kernel h分钟定义为 define min x y typeof x min1 x typeof y min2 y void min1 min2 min1 lt min2 min1 min2 我不明白那条线是什么 void mi
  • 在 SimpleInjector 中使用 IAuthorizationFilter 进行依赖注入

    我有课PermissionFilter实现IAuthorizationFilter from System Web Mvc 由于它具有已映射的依赖项 因此我想使用 SimpleInjector 来提供它 我正在这样做 与 Ninject 合
  • 嵌套 ES6 类?

    似乎可以将类嵌套在构造函数中 然后可以从类中的任何位置实例化 这是官方的吗 编辑 例如 class C constructor class D constructor method var a new D works fine var a
  • 跨域AJAX withCredentials,PHP返回标头内容长度,但没有内容

    我正在尝试从一个域上的页面向另一个域上的 PHP 服务器发送跨域请求 没有凭据 一切都可以正常工作 我需要一个会话 但一旦添加凭据 它就不起作用 这是JS代码 var xhr new XMLHttpRequest xhr open GET
  • 使用 $_GET 字符串传递换行符

    我必须将字符串传递给表单 我想按以下方式混合使用 GET 和 POST
  • ViewBox 内的 WPF TextBox 在调整大小时丢失光标

    我在视图框中有一个文本框 当我尝试调整窗口大小时 文本框大小和字体大小会缩放 但如果我尝试聚焦文本框并尝试使用键盘在文本框中移动光标 有时光标会消失 有没有办法始终显示光标 请参考下面的代码 其中 ViewBox 内有一个 TextBox
  • boost/archive/binary_woarchive.hpp 和/或 boost/archive/binary_wiarchive.hpp 的序列化示例?

    我试图找到一个很好的例子来说明如何使用 boost 序列化内容的这些二进制宽字符版本 我拼凑了一些代码来尝试让它工作 但不幸的是 在尝试编译它时 我遇到了链接器错误 这是我的代码 以防我做任何明显错误的事情 include
  • 处理子例程中重复出现的 VBA 错误

    我被困在我有解决方法的事情上 但这让我烦恼我没有关于如何解决使用问题的直接答案On Error Goto对于重复出现的错误 我的问题本质上是一样的正如这个 但是提供的答案是OP整体方法的替代方案 而不是如何处理具体问题 我在下面简化了一个例