按顺序加载不同的用户表单

时间:2016-12-31 16:07:55

标签: excel vba initialization userform

我对从不同模块在不同时间调用两个不同用户表单的过程感到困惑。

我有两个名为“UserForm1”和“UserForm2”的用户表单,在“UserForm1”上我还有一个静态按钮,代码名为:“Private Sub UserForm_Click()”

表单中的subs包含以下代码:

通过名称:UserForm1:

[在userform1上我有一个按钮:]

private sub OKButton_Click()
msgbox("OKButton_Click via 1")
End Sub

Public Sub UserForm1_Initialize()
msgbox("UserForm1_Initialize via 1")
'dynamic form initialisation
End Sub

Private Sub UserForm_Click()
msgbox("UserForm_Click via 1")
End Sub

威盛名称:UserForm2

Public Sub UserForm_Initialize()
msgbox("UserForm_Initialize via 2")
'dynamic form initialisation
End Sub

我在两个用户表单中调用:

Module57
Sub Vitamins()
UserForm2.Show 'Initialising Userform2
end sub

Module53
Sub fix_ratios()
UserForm1.Show 'Initialising Userform1
end sub

当我调用其中任何一个时出现问题,起初当UserForm1工作正常时我无法调用Userform2,所以我通过双击UserForm2的对象来更改UserForm2的名称和代码,然后创建新代码:

Private Sub UserForm_Initialize()

End Sub

所以我粘贴了我的代码来初始化UserForm2,它运行正常。但我现在意识到它只是窃取了第一个UserForm中的“UserForm_Initialize()”。

所以我尝试将子名改为:

Public Sub UserForm1_Initialize()

end sub

Public Sub UserForm2_Initialize()

end sub

但是它不会再调用UserForms了。有人会有建议,或者能告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:1)

解决方案就像tlemaster建议的那样:

在每个表单所属的表单中都有单独的subs。(这不是一个模块,但在编辑器的顶视图中显示“ - [UserFormx(code)]。

最重要的是,一旦你在另一个模块中使用:userformx.show,它将首先执行:

Sub Userform_Initialize()

然后,一旦完成,它将显示userformx。

如果Sub Userform_Initialize()被命名为Sub Userform_Initialise(),它将不会超出sub,它只会显示未初始化的子。

如果单击userform上的“view object”,然后双击表单模板,它将生成/转到代码:

Sub userform(x?)_clicked()

在显示userformx之前也不会执行此操作。

最重要的是,可以有两个同名的潜艇:

Sub Userform_Initialize()

Sub Userform_Initialize()

只要它们使用不同的“表单”/表单代码,Excel就会自动执行从任何随机无关模块调用的表单的初始化:“UserformY.Show”

享受。