我有一个名为sub1()
的子,它通过命令userform1.show()
激活userform1
此userform1有一个名为continue的按钮。单击该按钮后,将激活一个名为Private Sub continuebutton()
的宏。
我想以这样的方式进行编程,即重定向到userform1.show()
中sub1()
之后的行。
是否可以做到这一点?
答案 0 :(得分:1)
在userform1的表单属性上,将其“Modal”属性设置为true。
当表单打开时,它将具有独占焦点,并且sub1中的代码在关闭之前不会继续运行。这可能是您需要的解决方案。
在下面的代码中,msgbox只会在userform1关闭后出现:
sub sub1()
userform1.show()
msgbox "Now continuing with sub1"
end sub
答案 1 :(得分:1)
只要你展示表格就没办法。
如果您显示表单模态,则调用例程会在(并且仅当)表单关闭时继续。
如果您显示表单非模态,代码将继续在show
之后直接运行 - 所以它已经完成。
因此,当用户单击“继续...”按钮以使调用宏继续时,您必须关闭表单,或者您必须将代码拆分为两个例程,并在按钮单击时调用第二个。
答案 2 :(得分:1)
您可以按如下方式更改Sub1:
Sub sub1(Optional Continue As Boolean)
If Continue = True Then
DoSomeStuff
Exit Sub
End If
userform1.show
End sub
然后,您可以使用以下方式致电sub1
Private Sub continuebutton()
Call sub1(True)
End Sub
希望有所帮助
答案 3 :(得分:1)
理论上,如果你这样做,你想要的是什么:
在UserForm中:
Private Sub btnContinue_Click()
flag = True
Debug.Print "I continue ..."
sub1
End Sub
在一个模块中:
Public flag As Boolean
Public Sub sub1()
If flag Then
Debug.Print "sub 1 continues here..."
Else
flag = False
UserForm1.Show
Exit Sub
End If
End Sub
它将完全按预期工作,但以这种方式工作不是一个好习惯。 (有些人可能会在VBA中使用公共变量向你扔石头。)这里有两篇文章,提供了更好的想法:
免责声明 - 这是我的:
答案 4 :(得分:1)
如果您不想使用“模态表单”解决方案,可以在主模块中添加子程序,并在需要时调用它。因此,在userform1中,您有:
sub sub1()
userform1.show()
end sub
public sub sub2()
msgbox "Now continuing..."
end sub
然后在userform1中,在其onClose事件上设置一些代码:
Private Sub continuebutton()
Call sub2()
end sub