我有一个程序为我做了一些错误检查,并从另一个程序调用。我希望能够做的是,如果输入了错误数据并且错误检查过程发现了这一点,那么我想停止调用错误检查过程的过程。即如果错误检查程序是
sub errorCheck
主要程序是
sub main
和主要调用错误检查。当发现错误时,我想要sub errorCheck来停止main。我试图使用exit sub但这只退出errorCheck sub而不是main
并且非常感谢帮助
答案 0 :(得分: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
答案 1 :(得分: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如果发生任何错误它不应该停止 - 它应该忽略它并转而转到下一行代码。
在errorChecking
函数内部有一个条件语句,用于检查是否发生了错误。
如果发生错误,此函数会使用您定义的数字引发新错误(在我的示例中为999,您可以提供自己的数字)。
回到Main
函数,我们检查当前VBA.Err
对象的数量是否为999.如果是,则表示函数errorChecking
引发了错误,我们可以离开Main
子。
答案 2 :(得分:0)
这是一个基于 Tom的答案的简单示例:
Insert_in_sorted_list(node **head_ref,int data)
答案 3 :(得分: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