2015-02-09 94 views
1

正確打破在Excel 2010中,我有這樣的剪斷代碼:Excel的VBA不是錯誤

Application.DisplayAlerts = False         
On Error Resume Next 
ThisWorkbook.Worksheets("Satisfaction Summary").Delete      
On Error GoTo 0 
Set Report = Worksheets.Add(after:=Worksheets("Main")) 
'added this line to force an error: 
I = 1/0 

我們的目標是要刪除的表,如果它存在,如果沒有,忽略錯誤,然後加入一這個名字的表。

當我去工具|選項|常規並選擇所有錯誤休息,如果表不存在,IDE將停止,我無法繼續,因爲錯誤的。如果我將該設置更改爲中斷未處理錯誤,我完全按照我的預期過去。

不幸的是,如果我離開它中斷設置處理錯誤,所有其他錯誤我打導致調試器停止執行,這不是什麼它應該做的事。不,它不會暫停執行並向我顯示錯誤的代碼行,從而使我能夠調查問題並解決問題,並終止代碼的執行。它確實給了我一個顯示錯誤號&描述的對話框,但是當我點擊確定時,代碼執行已經終止,並且它不會將我移動到錯誤所在的代碼行。

有沒有其他人經歷過這一點,對解決這個問題的任何提示?

EDITS:添加了一行的代碼強制立即錯誤。這是對話框彈出時,選擇處理錯誤中斷:

enter image description here

正如你所看到的,沒有MSGBOX電話。

+1

這應該只會發生,如果你有一個錯誤處理程序(正在做它應該做的)。 – Rory 2015-02-09 16:04:57

+0

我不知道我跟着你。目前,此代碼是我處理的唯一錯誤處理。我期望_Break on Unhandled Errors_可以暫停執行上面兩個'On Error'行之外的任何其他代碼行,但事實並非如此。 – FreeMan 2015-02-09 16:07:58

+1

也有類似的問題,前幾天[這裏](http://stackoverflow.com/questions/28371485/no-debug-option-in-vba-runtime-error)。如果完全關閉Excel,並將此代碼放入新的工作簿中,是否仍存在相同的問題? IDE不應該在不允許你調試的情況下中斷,而且你描述的錯誤消息框(如另一個Q)似乎是一個'MsgBox'提示符,而不是實際的錯誤警報... – 2015-02-09 16:11:31

回答

1

我不是ON ERROR RESUME NEXT一個大風扇。如何檢查工作表是否存在,如果需要刪除?

Declare SheetExists as Boolean 

SheetExists = False 

For SheetCounter = 1 To Worksheets.Count 
    If Worksheets(SheetCounter).Name = "Satisfaction Summary" Then 
     SheetExists = True 
    End If 
Next i 

If SheetExists Then 
    ThisWorkbook.Worksheets("Satisfaction Summary").Delete 
End If 

'copied from code you provided 
Set Report = Worksheets.Add(after:=Worksheets("Main")) 
+1

這樣可以避免錯誤,但實際上並未回答問題。 – 2015-02-09 17:49:43

+0

雖然這實際上並沒有回答這個問題,但我正在進行投票,因爲這是我最終用來解決問題的方法。基於對此的一般缺乏反饋,無論我是唯一一個這個問題,或者它是一個MS錯誤... – FreeMan 2015-02-20 17:45:50

0

改爲試試。同樣的想法,略有不同的評價。

Application.DisplayAlerts = False 
    Dim wsSheet As Worksheet 
    On Error Resume Next 

    'Attempts to set object to worksheet you wish to delete 

    Set wsSheet = Sheets("Satisfaction Summary") 

    On Error GoTo 0 

    'if wsSheet was successfully set to an existing sheet 

    If Not wsSheet Is Nothing Then 

     wsSheet.Delete 

    End If 
+1

這避免了錯誤,但實際上並沒有回答這個問題。 – 2015-02-09 17:47:43

+0

我沒有測試你的方法,但我懷疑'Set'行最終會給我和我最初的代碼一樣的問題。 – FreeMan 2015-02-20 17:48:03