在我的电子表格中,我有一个应该始终打开的UserForm。
有一段时间,我的代码将包含一个“结束”,我根据一些if语句退出代码。
问题是这会关闭UserForm,有没有办法防止这种情况发生?
编辑:
Sub Test1()
'Random code
Call Test2(Variable)
'Random code
End Sub
Sub Test2(ByVal Variable as Double)
If Variable = 0 then
'Random code
End If
If Variable = 1 then
Call Test3
End 'Original placement of End
End If
End Sub
Sub Test3()
'Random code
End Sub
这是代码构建方式的一个粗略示例(此时代码相当长)。因此,根据“变量”,Test2中会发生不同的事情。但是如果变量是1,则Test1中的“随机代码”无法执行,因此我必须停止代码。我尝试用“Exit Sub”替换“End”,这只会阻止Test2中的代码运行,当它返回到Test1时会给我一个错误。
EDIT2: Test1()实际上是四个不同的subs(此时,将会添加更多)所有调用Test2()。这就是为什么我选择将它分成很多潜艇并从潜艇中调用它们的原因。
答案 0 :(得分:2)
不,如果您坚持使用End
,请不要这样做。这基本上与单击开发人员窗口中的“停止”按钮具有相同的效果。你应该(很可能)不使用End
。我不能告诉你应该使用什么,因为我不知道你想要实现什么。
<强>更新强>
根据您的代码,我认为Test3()
没有任何理由嵌套在Test2()
中,因为它运行 随机代码或< / strong> Test3()
(从不两者兼而有之)。有什么阻止你将所有不同的案例分成不同的子集,然后在主子域中执行If
语句吗?
Sub Main()
If Variable = 0 Then
'Random code from before Test2()
'Random code from Test2()
'Random code from after Test2()
ElseIf Variable = 1 Then
Call Test3()
Else
MsgBox "Variable must be 0 or 1!"
End Sub
答案 1 :(得分:1)
End
关闭所有内容并杀死你拥有的所有变量和对象。
这可能是结束任何潜艇的最糟糕的方式,很可能你不需要它。
What's the deference between "end" and "exit sub" in VBA?
https://msdn.microsoft.com/VBA/Language-Reference-VBA/articles/end-statement
答案 2 :(得分:1)
你需要告诉Test1它需要停止。解决此问题的一种方法是将subs更改为函数并返回指示状态的值。像这样的东西会起作用:
Function Test1() As Integer
Dim i As Integer
'Random code
i = Test2(Variable)
If i = 1 Then Exit Function
'Random code
End Function
Function Test2(ByVal Variable As Double) As Integer
Test2 = 0
If Variable = 0 Then
'Random code
End If
If Variable = 1 Then
Call Test3
Test2 = 1
Exit Function
End If
End Function
Function Test3() As Integer
'Random code
End Function