在子(“敏感性”)中,我正在调用另一个子(“ MVE_NIM_Subs.MVE_Main”),如果该子输出一个MsgBox,我想结束子并转到定义的“跳转”,而不是继续执行子。 ¿我该怎么办?
谢谢
Public Sub Sensitivities()
Application.Run "MVE_NIM_Subs.MVE_Main"
........
Jump:
End Sub
答案 0 :(得分:3)
您可以使用公共布尔变量来捕获Msgbox。在子MVE_NIM_Subs.MVE_Main
中,修改您的代码,以在出现msgbox时将公共布尔变量设置为true。
此子句结束后,执行将返回到子Sensitivities
中的执行代码。然后只需检查公共布尔变量的值即可。如果是这样,请转到“跳转”。
类似这样的东西:
Option Explicit
Public DidMsg As Boolean
Sub Sensitivities()
DidMsg = False
Application.Run "MVE_NIM_Subs.MVE_Main"
If DidMsg = True Then GoTo Jump
'rest of your code
'
'
'
'
Jump:
'rest of your code after point Jump
'
'
'
'
End Sub
Sub MVE_Main()
'your code whatever it is
'right after using the msgbox type:
DidMsg = True
End Sub
答案 1 :(得分:2)
MsgBox是模态元素,因此代码执行将暂停,直到用户处理它为止。这给您两个选择:
不显示MsgBox(如果您只想在发生这种情况时停止代码,我不确定它的意义是什么?)
创建一个非模式用户窗体来代替MsgBox。
答案 2 :(得分:1)
我认为您必须选择:
使MVE_NIM_Subs.MVE_Main
为返回Bool
的函数。当您在MVE_NIM_Subs.MVE_Main
中显示消息框时,请将返回值设置为True
。然后在调用sub中,您可以编写:
如果returnValue,则转到跳转
保留MVE_NIM_Subs.MVE_Main
作为子变量,并声明一些全局Bool
变量,该变量可以在两个子变量中使用。在外部子菜单中,在调用False
之前将其设置为MVE_NIM_Subs.MVE_Main
,并在MVE_NIM_Subs.MVE_Main
中将其显示为True
,只要显示消息框即可。然后,您可以在外部子程序中使用它来决定是否跳转,就像第一个选项一样:)