【问题标题】:Error handling when running a VBA macro in opened worksheet在打开的工作表中运行 VBA 宏时的错误处理
【发布时间】:2019-07-11 01:57:33
【问题描述】:

我正在尝试编写一些代码,这些代码将运行来自与我所在的工作表不同的工作表中的任意宏,并具有优雅的错误处理。

我正在尝试通过使用 On Error Resume Next 来做到这一点,但这似乎只在我正在运行的工作表中具有范围。我曾尝试先激活目标工作表,但这不起作用。

我当前的代码如下所示:

Set wbTarget = Workbooks.Open(sPath)
Set wbThis = ThisWorkbook
wbTarget.Activate
On Error Resume Next
Application.Run (wbTarget.Name & "!ErrorProducingMacro")
On Error Goto 0
wbThis.Activate

我正在对产生错误的宏进行测试,我希望我的代码会忽略该错误,但是它显示的错误就像未调用 On Error Resume Next 一样。有没有办法设置任何人都知道的目标工作簿的错误处理?

任何帮助将不胜感激。

【问题讨论】:

  • 您的问题与this one 非常相似。顺便说一句 - On Error Resume Next 通常不会被归类为“优雅的错误处理”,因为它根本不处理错误:)
  • 哦,是的,完全 - 完成的代码将使用 Err.Description 做一些事情。这个问题似乎暗示我的代码应该按预期工作,除了它没有?这是因为目标工作簿的本机错误处理正在覆盖它吗?
  • 发生错误时显示哪一行?
  • ErrorProducingMacro 中的行 - Err.Raise 1
  • AFAIK,不可能超越其他工作簿中的错误处理,也不谨慎。最好在模块中使用On Error Resume Next。但是,您很想从远程(即ThisWorkbook)执行此操作,并且不打算保存打开的工作簿。可以使用下面的行。在模块中插入一行 Ln = Wb.VBProject.VBComponents("Module1").CodeModule.ProcStartLine("boom", 0) Wb.VBProject.VBComponents("Module1").CodeModule.InsertLines Ln + 1, "On Error Resume Next" Run Wb.Name & "!boom" 或类似的东西

标签: excel vba


【解决方案1】:

根据 Ahmed AU - 类似

Ln = Wb.VBProject.VBComponents("Module1").CodeModule.ProcStartLine("ErrorProducingMacro", 0) 
Wb.VBProject.VBComponents("Module1").CodeModule.InsertLines Ln + 2, "On Error Resume Next" 
Run Wb.Name & "!ErrorProducingMacro"

【讨论】:

    猜你喜欢
    • 2019-04-30
    • 1970-01-01
    • 2018-11-06
    • 2018-01-25
    • 2015-10-15
    • 1970-01-01
    • 1970-01-01
    • 2023-01-27
    • 1970-01-01
    相关资源
    最近更新 更多