Я хочу объявить и создать форму пользователя с VBA - PullRequest
0 голосов
/ 03 ноября 2019

Я пытаюсь создать новую пользовательскую форму в VBA с помощью:

Автоматическое создание флажков в пользовательской форме, получаемых из массива

Dim SelectionForm As Control

For r = 1 To UBound(individualValues)
SelectionForm.height = UBound(individualValues) * 30
    Set c = SelectionForm.Controls.Add("Forms.CheckBox.1", "Checkbox" & r,True)
    With c
        .Caption = individualValues(r)
        .Width = 100
        .height = 20
        .Top = r * 20
        .Left = 10
    End With

Next r

SelectionForm.Show

Но я застрял с ошибкой на Dim c as Control:

Определяемый пользователем тип не определен

Моя идея заключается в создании новой пользовательской формы на VBA изаполните его флажками (из массива, а не из диапазона, как в ссылке).

Код работает, когда я использую существующую форму пользователя, но я хотел бы поделиться своим кодом с другими, а затембыло бы немного неудобно, если бы они вручную создавали новую пользовательскую форму с именем UserForm1 - если вы понимаете, о чем я.

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

Мне также интересно, как это работало с этими людьми в URL, поскольку это только с 2014 года и, похоже, сработало тогда. Поэтому мне интересно, было ли обновление, которое прекратило работу определенной библиотеки, или в чем здесь проблема.

1 Ответ

1 голос
/ 03 ноября 2019

Пожалуйста, проанализируйте этот простой код, он поможет вам, я полагаю

Sub MyForm()

    Dim myFRM   As Object
    Dim myFRM2  As Object

    ' If Userform exists in workbook and its name is UserForm1
    Set myFRM = UserForm1

    ' If You want to create userform on the fly
    Set myFRM2 = ThisWorkbook.VBProject.VBComponents.Add(3)

    Dim c As Object
    ' or
    Dim d As MSForms.CheckBox

    Set c = myFRM2.Designer.Controls.Add("Forms.CheckBox.1", "Checkbox1", True)
    Set d = myFRM2.Designer.Controls.Add("Forms.CheckBox.1", "Checkbox2", True)

    VBA.UserForms.Add(myFRM2.name).Show
    ThisWorkbook.VBProject.VBComponents.Remove myFRM2

    Set c = myFRM.Controls.Add("Forms.CheckBox.1", "Checkbox1", True)
    Set d = myFRM.Controls.Add("Forms.CheckBox.1", "Checkbox2", True)

    myFRM.Show


End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...