1

我正在尝试编写一个在初始化时加载控件的新用户窗体。

无论出于何种原因,我编写的测试模块在运行时都不会在用户表单中加载任何内容,尽管用户表单本身确实出现了。

模块代码:

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 代码时,它会正确初始化。有什么建议吗?

4

1 回答 1

1
Set submit = UserForm1.Controls.Add("Forms.CommandButton.1", "Submit")

就是添加按钮......只是不在check实例上。

UserForm1.Show;通过UserForm1UserForm1模块中引用,您已经引用了该表单的默认实例,它可能是也可能不是当前正在初始化的实例。

这应该解决它:

Set submit = Me.Controls.Add("Forms.CommandButton.1", "Submit")

模块是一个UserForm类,具有可视化设计器组件和VB_PredeclaredId设置为 的属性值True预先声明的实例是该隐藏属性值的结果,VB_PredeclaredId并且根据语言规范,它的名称与类本身的名称相匹配,即UserForm1. 通过Me用作限定符而不是UserForm1,您指的是当前正在运行的任何实例,而不是类的默认实例

避免在表单的代码隐藏中引用默认实例。

于 2019-06-04T16:34:15.383 回答