VBA - 用户窗体按钮(宏)继续运行子

时间:2017-10-25 12:01:17

标签: vba excel-vba excel

我有一个名为sub1()的子,它通过命令userform1.show()激活userform1

此userform1有一个名为continue的按钮。单击该按钮后,将激活一个名为Private Sub continuebutton()的宏。

我想以这样的方式进行编程,即重定向到userform1.show()sub1()之后的行。

是否可以做到这一点?

5 个答案:

答案 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