仅针对特定范围应用“On error GoTo”

时间:2015-04-23 00:22:37

标签: excel vba

我想在代码的下几行中应用“On Error GoTo err1”:

On Error GoTo err1
ActiveWorkbook.SaveAs Filename:="C:\project\" & Year(Date) & "\" & _
                   MonthName(Month(Date)) & "\" & MyFileName & ".xls"
ActiveWorkbook.Close SaveChanges:=False

就是这样,之后我想禁用错误处理。我试图添加“On Error resume”,但没有任何结果。 err1处理看起来像这样:

    err1:
    MsgBox ("Project will not overwrite the file"), vbCritical
    ActiveWorkbook.Close SaveChanges:=False

此子程序将一张文件保存到新的.xls文件中,它会按日期自动保存。如果已生成文件,并且当要求覆盖文件时,将运行宏的人点击“否”,则此err1将弹出消息并阻止用户获取调试消息。但是,这个错误处理似乎是通过所有不好的代码 - 保存文件后生成一个自动电子邮件,如果该人想要在单击“发送”按钮之前返回项目,它会转到相同的err1并关闭原始工作簿(不是第一次发生的单独工作表)并使用户无语。我想避免这种情况,因为具有不良Excel技能的用户将生成这些报告。

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

这实际上不是答案,但我不适合评论。

我假设你做了类似下面的事情。所以你有点三明治你怀疑的行产生错误与OEG和OEG0如下:

Sub test()

    On Error GoTo err1
    'Access non existing named range
    Range("ProduceError").Select
    'Above will produce error and your handler kicks in
    On Error GoTo 0


    MsgBox "First error handled successfully"

    'Access invalid range address
    Range("B0").Select
    'Above will error out normally and err1 not called
    'OEG<Label> only called once and not in the entire macro

    Exit Sub
err1:
    MsgBox Err.Description
    Resume Next

End Sub

现在你看,你的错误处理程序在OEG0行之后不再被调用 遇到第二个错误产生线后,将引发正常错误 Now, you might want to check this out to review error handling