我正在尝试编写一个新的UserForm,它在初始化时加载控件。
尽管出于某种原因,尽管出现了UserForm本身,但我编写的测试模块仍未在运行时在UserForm中加载任何内容。
模块代码:
Sub test()
Dim check As New UserForm1
Load check
check.Show
End Sub
用户窗体代码:
Private Sub UserForm_Initialize()
Dim submit As MSForms.CommandButton
Set submit = UserForm1.Controls.Add("Forms.CommandButton.1", "Submit")
With submit
.Caption = "Submit"
End With
End Sub
当我运行模块时没有按钮出现,但是,当我直接运行UserForm代码时,它会正确初始化。有什么建议吗?
答案 0 :(得分:1)
list_id, list_name = zip(*[(a['id'], a['name']) for a in list_dic])
正在添加按钮...只是不在Set submit = UserForm1.Controls.Add("Forms.CommandButton.1", "Submit")
实例上。
请参见UserForm1.Show;通过在check
模块中引用UserForm1
,您已经引用了该表单的默认实例,该实例可能是也可能不是当前正在初始化的实例。
这应该解决它:
UserForm1
Set submit = Me.Controls.Add("Forms.CommandButton.1", "Submit")
模块是一个类,具有可视设计器组件和将UserForm
属性值设置为VB_PredeclaredId
的类。 预声明的实例是该隐藏的True
属性值的结果,并且根据语言规范,其名称与类本身的名称匹配,即VB_PredeclaredId
。通过使用UserForm1
而不是Me
作为限定符,您可以引用当前正在运行的任何实例,而不是该类的默认实例。
避免在表单的代码隐藏中引用默认实例。