错误继续下一个不工作

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),您使用 ResumeResume NextResume <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 并逐步执行代码以查看它因错误而停止的位置。