被调用的子/函数可以结束调用者子函数的执行吗?

时间:2017-06-21 21:35:24

标签: vba excel-vba excel

我有Sub A,在某些时候会调用Sub B

Sub A()
    ...
    B
    ...
End Sub

Sub B()
    ...
End Sub

我是否有任何方式对Sub B(给定条件)说完全终止执行? 如果我说If True Then Exit Sub之类的话,Sub B会终止,但会将线程传回Sub A。相反,我想要弄清楚如何(如果可能的话)完全结束执行线程。

背景

Sub B应该是引发异常然后终止执行的通用方法,用于所有过于复杂的情况,其中更值得用户提供正确的输入而不是写大量的行处理这种异常的代码。

2 个答案:

答案 0 :(得分:0)

您可以使用End来停止所有完全运行的VBA代码,例如:

Sub B
    If disastrousCalamity Then End
Exit Sub

我能想到的其他两种方式是我使用的两种方式:

1)你有一个公共布尔值,例如CancelBool并在灾难发生时将其设置为True,然后在Sub A中的阻塞点检查此项并退出A ......或者......

2)Sub B实际上被转换为一个返回布尔值的函数

Function B() As Boolean
If disaster then
    B = True
Else
    B = False
End If
End B

那样,当你从A打电话给B时,你可以这样使用它:If B = True Then Exit Sub而且A也会停止吗?!

答案 1 :(得分:0)

Global SubBReturnedError As Boolean

Sub A
    ' Some code
    Call B
    If SubBReturnedError = True Then End Sub
    ' Some code that may or may not get executed
End Sub

Sub B
    ' Some code
    ' Fudge happened
    If someError = True Then SubBReturnedError = True
    If SubBReturnedError = True Then End Sub
    ' Some code that won't get executed
End Sub

我个人赞成这个解决方案而不仅仅是End - 只是因为它为您提供了更容易访问的选项,以便您几乎不可避免地返回添加或优化代码。