On Error Resume Next不工作

时间:2015-02-13 14:30:56

标签: vba powerpoint powerpoint-vba

所以我创建了一个相当大的宏,为我的公司创建了powerpoint演示文稿。我希望能够使用以下两种不同的区域运行它:

For each sRegion

MyMacro(sRegion)

Next

我想跳过几行。对于第一次运行MyMacro完美运行,错误处理程序跳过这些步骤。但是对于下一个sRegion,错误处理程序不起作用。

即使我一行一行地浏览错误恢复下一个语句,它也不起作用,实际上只是停止宏。

我会将代码发布到破坏的地方,尽管它完全无关紧要(在第二次运行时,首先调用宏时工作正常)

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错误并抛出错误并停止宏。

在有人提出建议之前我已经检查过错误陷阱是否已开启'打破未处理的错误'它是

之前有人遇到此问题或知道解决方案吗?

2 个答案:

答案 0 :(得分:4)

确保在跳错后(您使用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

答案 1 :(得分:0)

看看这里发生了什么:

    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并逐步查看代码以查看它因错误而停止的位置。