我对从不同模块在不同时间调用两个不同用户表单的过程感到困惑。
我有两个名为“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了。有人会有建议,或者能告诉我我做错了什么吗?
答案 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”
享受。