Vba 被调用的子函数能否结束调用方子函数的执行?

Vba 被调用的子函数能否结束调用方子函数的执行?,vba,excel,Vba,Excel,我有一个子a,在某一点上称为子B: Sub A() ... B ... End Sub Sub B() ... End Sub 我有没有办法让SubB(给定一些条件)完全终止执行? 如果我说类似于的话,那么退出Sub,Sub B将终止,但会将线程传递回Sub A。相反,我想要的是弄清楚如何(如果可能的话)完全结束执行线程 背景 Sub B应该是引发异常然后终止执行的通用方法,用于所有过于复杂的情况,在这些情况下,用户提供适当的输入而不是编写大量代码来处理此类异

我有一个
子a
,在某一点上称为
子B

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

Sub B()
    ...
End Sub
我有没有办法让Sub
B
(给定一些条件)完全终止执行? 如果我说类似于
的话,那么退出Sub
Sub B
将终止,但会将线程传递回
Sub A
。相反,我想要的是弄清楚如何(如果可能的话)完全结束执行线程

背景


Sub B
应该是引发异常然后终止执行的通用方法,用于所有过于复杂的情况,在这些情况下,用户提供适当的输入而不是编写大量代码来处理此类异常更为值得

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

Sub B
    If disastrousCalamity Then End
Exit Sub
我能想到的其他方法只有两种:

1) 您有一个公共布尔值,例如
CancelBool
,并在B中发生灾难时将其设置为True,然后在子a中的瓶颈处检查此值并退出a。。。或者

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

Function B() As Boolean
If disaster then
    B = True
Else
    B = False
End If
End B
这样,当您从A调用B时,您可以这样使用它:
如果B=True,则退出Sub
,A也将停止

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
,因为它为您提供了更容易访问的选项,您几乎不可避免地要回去添加或优化代码