2015-07-28 64 views
2

我有一個爲我執行一些錯誤檢查並從不同過程調用的過程。我希望能夠做的是,如果輸入了錯誤的數據並且錯誤檢查過程發現了這個錯誤,那麼我想停止調用錯誤檢查過程的過程。即,如果錯誤檢查過程是退出調用不同過程的過程VBA Excel

sub errorCheck 

和主要過程是

sub main 

和主呼叫錯誤檢查。當發現錯誤時,我想要sub errorCheck停止主。我曾嘗試使用退出子,但這種退出僅errorCheck子不是主要

,並幫助將是巨大的感謝

回答

4

讓它返回一個布爾函數。檢查調用過程main中的值是否爲False,然後在主過程中執行Exit Sub。

有點難以實現它:只需輸入End而不是Exit Sub。但是,這會完全停止執行代碼。

事情是這樣的:

Function errorcheck() As Boolean 
' in this case it is always false of course 
    errorcheck = False 
End Function 

Sub main() 
    If Not errorcheck Then 
     Exit Sub 
    End If 
End Sub 
+0

你我不想結束代碼。如果我返回一個布爾值,如果它是真或假,我如何檢查主程序?對不起,新的VBA – GBSingh

0

您可以使用全局對象Err來完成這個任務。

請看下面的例子:

Sub main() 

    '(...) 

    On Error Resume Next 
    Call errorChecking 
    If VBA.Err.Number = 999 Then 
     Exit Sub 
    End If 
    On Error GoTo 0 

    '(...) 

End Sub 

Sub errorChecking() 

    If Error Then 
     Call VBA.Err.Raise(999, "errorChecking", "Error found") 
     Exit Sub 
    End If 

End Sub 

之前,我們調用函數errorChecking我們指示VBA,如果出現任何錯誤不應該停止 - 它應該只是忽略它,去代碼的下一行。

Inside errorChecking函數有一個條件語句來檢查是否發生錯誤。 如果發生錯誤,此功能會用您定義的號碼(在我的示例中爲999,您可以拿出您自己的號碼)產生一個新錯誤。

早在Main功能,我們檢查,如果VBA.Err對象的當前數量爲999。如果是,則意味着該錯誤是由功能errorChecking提高,我們可以離開Main子。

0

下面是一個簡單的例子,基於湯姆回答:

Sub MAIN() 
    Dim rng As Range, CellIsNogood As Boolean 
    Set rng = Application.InputBox(Prompt:="Enter range", Type:=8) 
    Call ErrorCheck(rng, CellIsNogood) 
    If CellIsNogood Then 
     MsgBox "error in range" 
    End If 
End Sub 

Sub ErrorCheck(r As Range, b As Boolean) 
    Dim rr As Range 
    b = False 
    For Each rr In r 
     If IsError(rr.Value) Then 
      b = True 
     End If 
    Next rr 
End Sub 
0

看到的湯後,並說我做了一些研究,並得到了這個工作。以下是我使用的代碼。感謝您的其他答案:)

Private Function errorCheckingBox(box1, message) As Boolean 
If Len(box1.value) = 0 Then 
    MsgBox message, vbExclamation, "Invalid Selection" ' displays a messgae box 
    box1.SetFocus 
    errorCheckingBox = True 
End If 
End Function