2015-08-13 82 views
1

我有這段代碼可以使用Ctrl + F命令在excel表格中找到一個特定的值,但是當代碼沒有找到任何我想要它發出的消息時。錯誤VBA中的GOTO語句

sub test() 
    f=5 
    do until cells(f,1).value=""  
    On Error goto hello 
     Cells.Find(what:=refnumber, After:=ActiveCell, LookIn:=xlFormulas, _ 
        lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
        MatchCase:=False, SearchFormat:=False).Activate 

f=f+1 

     hello: Msgbox"There is an error" 

    loop 

    endsub 

問題是即使沒有發現錯誤消息仍然顯示。我希望消息框僅在出現錯誤時才顯示。

+0

使用'''Err.Number''',例如:'''如果Err.Number的<> 0,則MSGBOX 「有錯誤」''' – dee

+0

確定如果我有多個這樣的條件下, VB如何知道哪個err.number屬於哪個條件 – Anarach

+0

'''Err'''對象包含有關運行時錯誤的信息。 Err''對象的屬性將在錯誤發生時填充。因此,如果發生錯誤,Err'對象不屬於它通知的任何條件。請參閱'''Err.Clear'''。 – dee

回答

3

對於這種情況,您應該使用Exit SubExit Function並讓hello標籤到代碼的最後部分。看樣:

Sub test() 

    f = 5 

    On Error GoTo message 

check: 
    Do Until Cells(f, 1).Value = "" 

     Cells.Find(what:=refnumber, After:=ActiveCell, LookIn:=xlFormulas, _ 
       lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False).Activate 
    Loop 

    Exit Sub 

message: 
    MsgBox "There is an error" 
    f = f + 1 
    GoTo check 

End Sub 
+0

exit sub和end sub有什麼區別? – Anarach

+0

我不想讓代碼在錯誤發生後結束,我希望它繼續, – Anarach

+0

Nothing,'Exit'是一個關鍵字來停止當前進程。所以,退出'Funciton'使用'退出函數',退出'Sub',使用'退出子' –

3

你需要一個exit sub(或exit function如果這是一個函數,而不是一個子的一部分)的代碼行hello: Msgbox"There is an error"之前,否則它下面的代碼,就一定會執行。看到這個帖子作爲參考 -

How to stop VBA macro automatically?

典例 -

on error goto bad 
    call foo 
    exit sub 
bad: 
    msgbox "bad" 
    'clean up code here 
exit sub 

public sub foo 
    msgbox 1/0 'could also trigger the error handling code by doing err.raise, to use user defined errors 
end sub 

更新:

要解決你的循環,你應該將錯誤處理循環的代碼 ,但在它之前仍然保留exit sub,以防止它被執行。

sub test() 
f=5 

do until cells(f,1).value=""  

On Error goto hello 

    Cells.Find(what:=refnumber, After:=ActiveCell, LookIn:=xlFormulas, _ 
       lookat:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _ 
       MatchCase:=False, SearchFormat:=False).Activate 


loop 

exit sub 

hello: 
    Msgbox"There is an error" 

endsub 
+0

我已經更新了問題,我不想出來做直到循環 – Anarach

+0

我明白,發現錯誤它會出來,但我希望它回到循環中。是否有可能 – Anarach

+0

@Anarach你需要一個單獨的goto語句(在錯誤處理代碼中),它將你帶回到循環(當然是條件測試)。 – iliketocode