错误继续下一个不工作
On Error Resume Next Not Working
所以我创建了一个相当大的宏,可以为我的公司创建 powerpoint 演示文稿。我希望能够 运行 它用于 2 个不同的区域,使用:
For each sRegion
MyMacro(sRegion)
Next
有些行我想跳过。对于第一个 运行 MyMacro 工作完美,错误处理程序跳过这些步骤。但是对于下一个 sRegion,错误处理程序不起作用。
即使我 运行 逐行通过 on error resume next 语句它也不起作用,实际上只是停止了宏。
我会post它被破坏的代码,虽然它是完全不相关的(在第二个运行通过,当宏被第一次调用时工作正常)
On Error Resume Next
PPPres.Slides(19).Moveto ToPos:=12
PPPres.Slides(20).Moveto ToPos:=13
PPPres.Slides(21).Moveto ToPos:=14
PPPres.Slides(22).Moveto ToPos:=15
PPPres.Slides(23).Moveto ToPos:=16
On Error GoTo 0
它将完全忽略 on 错误并抛出错误并停止宏。
在任何人建议是之前,我已经检查了 Error Trapping 是否开启 'Break on Unhandled Errors' 并且它是
有人以前遇到过这个问题或知道解决方案吗?
确保在跳转错误后(您使用了 On Error GoTo
),您使用 Resume
或 Resume Next
或 Resume <label>
命令删除了错误条件. 或者,删除 On Error GoTo
,仅使用 On Error Resume Next
.
根据您的问题和评论,您正在执行以下操作,总是在第二个语句中抛出错误:
Sub WrongOne()
On Error Goto Handler1 'prepared for error
Statement1WithError() 'error causes jump
Handler1: 'jump done, error handling is now disabled
Statement2WithError() 'THIS WILL ALWAYS THROW ERROR
End Sub
你总是会在 Statement2WithError()
上出错
正确方法:
Sub CorrectOne()
On Error Goto Handler1 '1. prepared for error
Statement1WithError() '2. error causes jump
Waypoint1: '5. continuing here
On Error Goto Handler2 '6. prepared for another error
Statement2WithError() '7. error causes jump to Handler2
Statement3WithError() '10. error causes jump to Handler2
Statement4WithError() 'etc...
Exit Sub
'EXAMPLE: after error, continue at SPECIFIC LABEL
Handler1: '3. jump done, error handling is now disabled
MsgBox(...)
Resume Waypoint1 '4. error handling is reloaded, jumping to label
'EXAMPLE: after error, continue with NEXT LINE
Handler2: '8. jump done, error handling is now disabled
MsgBox(...)
Resume Next '9. error handling is reloaded, now jumping to line
' following the line that caused error
End Sub
在您的情况下,VBA 正在按预期工作。你可以研究how error handling works in VBA.
看看这里发生了什么:
On Error Resume Next
' Error here, but we're ignoring it
' because of On Error Resume Next:
PPPres.Slides(19).Moveto ToPos:=12
' No more errors from here on:
PPPres.Slides(20).Moveto ToPos:=13
PPPres.Slides(21).Moveto ToPos:=14
PPPres.Slides(22).Moveto ToPos:=15
PPPres.Slides(23).Moveto ToPos:=16
' But the err condition is still set ... you haven't cleared it,
' so when we get here, it throws the error:
On Error GoTo 0
听起来好像在第一次迭代时一切正常,但第二次出现错误。我会注释掉 On Error Resume Next 并逐步执行代码以查看它因错误而停止的位置。
所以我创建了一个相当大的宏,可以为我的公司创建 powerpoint 演示文稿。我希望能够 运行 它用于 2 个不同的区域,使用:
For each sRegion
MyMacro(sRegion)
Next
有些行我想跳过。对于第一个 运行 MyMacro 工作完美,错误处理程序跳过这些步骤。但是对于下一个 sRegion,错误处理程序不起作用。
即使我 运行 逐行通过 on error resume next 语句它也不起作用,实际上只是停止了宏。
我会post它被破坏的代码,虽然它是完全不相关的(在第二个运行通过,当宏被第一次调用时工作正常)
On Error Resume Next
PPPres.Slides(19).Moveto ToPos:=12
PPPres.Slides(20).Moveto ToPos:=13
PPPres.Slides(21).Moveto ToPos:=14
PPPres.Slides(22).Moveto ToPos:=15
PPPres.Slides(23).Moveto ToPos:=16
On Error GoTo 0
它将完全忽略 on 错误并抛出错误并停止宏。
在任何人建议是之前,我已经检查了 Error Trapping 是否开启 'Break on Unhandled Errors' 并且它是
有人以前遇到过这个问题或知道解决方案吗?
确保在跳转错误后(您使用了 On Error GoTo
),您使用 Resume
或 Resume Next
或 Resume <label>
命令删除了错误条件. 或者,删除 On Error GoTo
,仅使用 On Error Resume Next
.
根据您的问题和评论,您正在执行以下操作,总是在第二个语句中抛出错误:
Sub WrongOne()
On Error Goto Handler1 'prepared for error
Statement1WithError() 'error causes jump
Handler1: 'jump done, error handling is now disabled
Statement2WithError() 'THIS WILL ALWAYS THROW ERROR
End Sub
你总是会在 Statement2WithError()
正确方法:
Sub CorrectOne()
On Error Goto Handler1 '1. prepared for error
Statement1WithError() '2. error causes jump
Waypoint1: '5. continuing here
On Error Goto Handler2 '6. prepared for another error
Statement2WithError() '7. error causes jump to Handler2
Statement3WithError() '10. error causes jump to Handler2
Statement4WithError() 'etc...
Exit Sub
'EXAMPLE: after error, continue at SPECIFIC LABEL
Handler1: '3. jump done, error handling is now disabled
MsgBox(...)
Resume Waypoint1 '4. error handling is reloaded, jumping to label
'EXAMPLE: after error, continue with NEXT LINE
Handler2: '8. jump done, error handling is now disabled
MsgBox(...)
Resume Next '9. error handling is reloaded, now jumping to line
' following the line that caused error
End Sub
在您的情况下,VBA 正在按预期工作。你可以研究how error handling works in VBA.
看看这里发生了什么:
On Error Resume Next
' Error here, but we're ignoring it
' because of On Error Resume Next:
PPPres.Slides(19).Moveto ToPos:=12
' No more errors from here on:
PPPres.Slides(20).Moveto ToPos:=13
PPPres.Slides(21).Moveto ToPos:=14
PPPres.Slides(22).Moveto ToPos:=15
PPPres.Slides(23).Moveto ToPos:=16
' But the err condition is still set ... you haven't cleared it,
' so when we get here, it throws the error:
On Error GoTo 0
听起来好像在第一次迭代时一切正常,但第二次出现错误。我会注释掉 On Error Resume Next 并逐步执行代码以查看它因错误而停止的位置。