【问题标题】:Userform not initializating despite proper header尽管标题正确,用户表单仍未初始化
【发布时间】:2019-06-05 00:39:34
【问题描述】:

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

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

模块代码:

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

【问题讨论】:

  • 你的第一段代码应该做什么?您是否已经创建了 Userform1?
  • FWIW Load check 是多余的/无操作。
  • @PeicongChen MSForms 是定义CommandButton 类的类型库的名称。
  • @MathieuGuindon 新东西要学习,谢谢指出。
  • @SJR 抱歉这么晚才知道,但代码的第一部分是如何在 Excel 工作簿中实际执行宏。第二位应该是初始化 UserForm 时发生的事情,但只有在创建 UserForm 并在第一位显示时才开始初始化。

标签: excel vba userform


【解决方案1】:
Set submit = UserForm1.Controls.Add("Forms.CommandButton.1", "Submit")

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

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

这应该可以解决它:

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

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

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

【讨论】:

    猜你喜欢
    • 2017-10-24
    • 1970-01-01
    • 2013-01-01
    • 2021-06-09
    • 2021-03-11
    • 1970-01-01
    • 2016-06-03
    • 1970-01-01
    • 2021-09-24
    相关资源
    最近更新 更多