依次加载不同的Userforms

我很困惑的过程调用两个不同的用户在不同的时间从不同的模块。

我有以下两个名为UserForm1和UserForm2 UserForm2 UserForm1我也有一个静态button代码名为“Private Sub UserForm_Click()”

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

通过名称:UserForm1:

[在userform1我有一个button:]

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的对象,然后创build新的代码,我改变了UserForm2的名称和代码:

 Private Sub UserForm_Initialize() End Sub 

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

所以我尝试改变子名称:

 Public Sub UserForm1_Initialize() end sub 

 Public Sub UserForm2_Initialize() end sub 

但是,它不会再调用用户窗体了。 会有人有一个build议,或能够告诉我我做错了什么?

解决scheme就像Tmaster提示:

每个窗体都有独立的子窗体。(这不是一个模块,而是在编辑器的顶视图中显示“ – [UserFormx(code)]”。

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

 Sub Userform_Initialize() 

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

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

如果您在用户窗体上单击“查看对象”,然后双击表单模板,它将生成/转到代码:

 Sub userform(x?)_clicked() 

这在显示userformx之前也不会被执行。

最重要的是,可以有两个相同名字的subs:

 Sub Userform_Initialize() Sub Userform_Initialize() 

只要它们在不同的“表单”/表单代码中,Excel将自动执行从任意不相关的模块中调用的表单的初始化:“UserformY.Show”

请享用。

Interesting Posts