退出程序已调用不同的程序VBA Excel

时间:2015-07-28 10:50:40

标签: vba excel-vba error-handling procedure excel

我有一个程序为我做了一些错误检查,并从另一个程序调用。我希望能够做的是,如果输入了错误数据并且错误检查过程发现了这一点,那么我想停止调用错误检查过程的过程。即如果错误检查程序是

sub errorCheck

主要程序是

sub main

和主要调用错误检查。当发现错误时,我想要sub errorCheck来停止main。我试图使用exit sub但这只退出errorCheck sub而不是main

并且非常感谢帮助

4 个答案:

答案 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