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

Loading different Userforms sequentially

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

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

表单中的订阅包含以下代码:

通过名称: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

VIA 名称: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_Initialize()"。

所以我尝试将子名称更改为:

Public Sub UserForm1_Initialize()

end sub

Public Sub UserForm2_Initialize()

end sub

但是它不会再调用用户窗体了。谁能给我建议,或者能告诉我我做错了什么吗?

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

在每个表单所属的表单中有单独的子。(这不是一个模块,但在显示“-[UserFormx(代码)”的编辑器的顶部视图中可视)。

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

Sub Userform_Initialize()

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

如果 Sub Userform_Initialize() 被命名为 Sub Userform_Initialise() 它不会执行子程序,它只会显示未初始化的子程序。

如果您在用户表单上单击 "view object",然后双击表单模板,它将 generate/go 到代码:

Sub userform(x?)_clicked()

这也不会在显示用户窗体之前执行。

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

Sub Userform_Initialize()

Sub Userform_Initialize()

只要它们在不同的 "Forms" /表单代码中,那么 Excel 将自动执行从任何随机无关模块调用的表单的初始化: "UserformY.Show"

尽情享受吧。