我有一個爲我執行一些錯誤檢查並從不同過程調用的過程。我希望能夠做的是,如果輸入了錯誤的數據並且錯誤檢查過程發現了這個錯誤,那麼我想停止調用錯誤檢查過程的過程。即,如果錯誤檢查過程是退出調用不同過程的過程VBA Excel
sub errorCheck
和主要過程是
sub main
和主呼叫錯誤檢查。當發現錯誤時,我想要sub errorCheck停止主。我曾嘗試使用退出子,但這種退出僅errorCheck子不是主要
,並幫助將是巨大的感謝
我有一個爲我執行一些錯誤檢查並從不同過程調用的過程。我希望能夠做的是,如果輸入了錯誤的數據並且錯誤檢查過程發現了這個錯誤,那麼我想停止調用錯誤檢查過程的過程。即,如果錯誤檢查過程是退出調用不同過程的過程VBA Excel
sub errorCheck
和主要過程是
sub main
和主呼叫錯誤檢查。當發現錯誤時,我想要sub errorCheck停止主。我曾嘗試使用退出子,但這種退出僅errorCheck子不是主要
,並幫助將是巨大的感謝
讓它返回一個布爾函數。檢查調用過程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
您可以使用全局對象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
子。
下面是一個簡單的例子,基於湯姆回答:
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
看到的湯後,並說我做了一些研究,並得到了這個工作。以下是我使用的代碼。感謝您的其他答案:)
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
你我不想結束代碼。如果我返回一個布爾值,如果它是真或假,我如何檢查主程序?對不起,新的VBA – GBSingh