Пользовательская форма не инициализируется несмотря на правильный заголовок - PullRequest
1 голос
/ 04 июня 2019

Я пытаюсь написать новую пользовательскую форму, которая загружает элементы управления при инициализации.

По какой-то причине написанный мной тестовый модуль ничего не загружает в пользовательскую форму во время выполнения, хотя сама пользовательская форма действительно появляется.

Код модуля:

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

При запуске модуля кнопка не отображается, однако при непосредственном запуске кода пользовательской формы он инициализируетсядолжным образом.Любой совет?

1 Ответ

1 голос
/ 04 июня 2019
Set submit = UserForm1.Controls.Add("Forms.CommandButton.1", "Submit")

То, что - это добавление кнопки ... только не в экземпляре check.

См. UserForm1.Show ; ссылаясь на UserForm1 в модуле UserForm1, вы ссылаетесь на экземпляр по умолчанию для этой формы , который может быть или не быть экземпляром, который в данный момент инициализируется.

Это должно исправить:

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

Модуль UserForm - это класс с компонентом визуального конструктора и значением атрибута VB_PredeclaredId, установленным на True. Экземпляр , предварительно объявленный , является результатом этого скрытого значения атрибута VB_PredeclaredId, и согласно спецификациям языка его имя соответствует имени самого класса, то есть UserForm1. Используя Me в качестве квалификатора вместо UserForm1, вы ссылаетесь на независимо от того, какой экземпляр в данный момент работает , в отличие от экземпляра класса по умолчанию .

Избегайте ссылки на экземпляр по умолчанию в коде формы.

...