2015-04-23 41 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

相關問題