按顺序加载不同的用户表单
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"
尽情享受吧。
我对在不同时间从不同模块调用两个不同用户窗体的过程感到困惑。
我有以下两个用户表单:"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"
尽情享受吧。