2015-04-23 40 views
0

我想申请“对错误转到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并关闭原始工作簿(不是第一次发生的单独工作表),并使用户无语。我想避免出现这样的情况,因为具有不良Excel技能的用户会制作这些报告。

有什么建议吗?

+2

如果你完成了'On Error Goto xxx'处理程序,你可以用'On Error Goto 0'来关闭它。更好的是,在调用SaveAs之前使用'Dir()'来检查文件是否存在操作。 –

+0

你好蒂姆,有趣,但错误转到0不会禁用处理程序。我可以检查dir,但是我想给用户一些空间让他“重新运行”,以防他做错了事情。不能理解为什么onerror处理程序通过宏的所有其余部分保持启用状态。 – user3812753

+1

@ user3812753我有点不同意。当你调用'On Error Goto 0'时,它不会重新调用处理程序。你是否正确放置或错误处理程序?看我的帖子。 – L42

回答

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

+0

谢谢你,作品像一个魅力! – user3812753

相关问题