我有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
应该是引发异常然后终止执行的通用方法,用于所有过于复杂的情况,其中更值得用户提供正确的输入而不是写大量的行处理这种异常的代码。
答案 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
- 只是因为它为您提供了更容易访问的选项,以便您几乎不可避免地返回添加或优化代码。