当该子内部的另一个子输出一个Msgbox时,如何从子中出去?

时间:2018-07-24 10:43:02

标签: excel vba excel-vba

在子(“敏感性”)中,我正在调用另一个子(“ MVE_NIM_Subs.MVE_Main”),如果该子输出一个MsgBox,我想结束子并转到定义的“跳转”,而不是继续执行子。 ¿我该怎么办?

谢谢

Public Sub Sensitivities() 
Application.Run "MVE_NIM_Subs.MVE_Main" 
........ 
Jump: 
End Sub

3 个答案:

答案 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是模态元素,因此代码执行将暂停,直到用户处理它为止。这给您两个选择:

  1. 不显示MsgBox(如果您只想在发生这种情况时停止代码,我不确定它的意义是什么?)

  2. 创建一个非模式用户窗体来代替MsgBox。

答案 2 :(得分:1)

我认为您必须选择:

  1. 使MVE_NIM_Subs.MVE_Main为返回Bool的函数。当您在MVE_NIM_Subs.MVE_Main中显示消息框时,请将返回值设置为True。然后在调用sub中,您可以编写:

    如果returnValue,则转到跳转

  2. 保留MVE_NIM_Subs.MVE_Main作为子变量,并声明一些全局Bool变量,该变量可以在两个子变量中使用。在外部子菜单中,在调用False之前将其设置为MVE_NIM_Subs.MVE_Main,并在MVE_NIM_Subs.MVE_Main中将其显示为True,只要显示消息框即可。然后,您可以在外部子程序中使用它来决定是否跳转,就像第一个选项一样:)