【发布时间】: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"或类似的东西