首页 文章

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

提问于
浏览
0

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

有什么建议?

1 回答

  • 1

    这实际上不是一个答案,但我无法评论它 .

    我假设你做了类似下面的事情 . 所以你有点 sandwich 你的怀疑线产生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 .

相关问题