所以我创建了一个相当大的宏,为我的公司创建了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错误并抛出错误并停止宏。
在有人提出建议之前我已经检查过错误陷阱是否已开启'打破未处理的错误'它是
之前有人遇到此问题或知道解决方案吗?
答案 0 :(得分:4)
确保在跳错后(您使用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。
答案 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并逐步查看代码以查看它因错误而停止的位置。