2016-01-19 3 views
1

В Excel 2010 я пытаюсь создать пользовательскую форму динамически в моем VBA-коде. Однако после запуска кода список не отображается при открытии раскрывающегося списка. Если я поставлю точку останова перед «.show», я могу проверить форму в окне дизайна, и я вижу, что этот список заполнен. Способет ли метод .show удалить список или что происходит? Решения, которые я нашел, сосредоточены на заполнении диапазона ячеек или размещении «.additem» в коде инициализации пользовательской формы. Я не хочу делать ничего, что требует от меня создания второго файла. Все должно быть в этом коде vba, если это возможно. Любая помощь оценивается. Далее следует мой код.Создание и заполнение combobox из модуля vba

Sub make_combobox_form() 
    ' Makes a form with only a simple combobox 
    Dim myForm As Object 
    Dim cb As MSForms.ComboBox 

    'Create the User Form 
    Set myForm = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm) 

    With myForm 
     .Properties("Width") = 400 
     .Properties("Height") = 300 
    End With 

    Set cb = myForm.Designer.Controls.Add("Forms.ComboBox.1") 
    With cb 
     .Top = 100 
     .Left = 100 
     .Height = 20 
     .Width = 200 

     .AddItem "Item_1" 
     .AddItem "Item_2" 
     .AddItem "Item_3" 
     .value = "Item_1" 
    End With 

    VBA.UserForms.Add(myForm.name).Show 

    ThisWorkbook.VBProject.VBComponents.Remove myForm 

End Sub 
+1

Пытались ли вы, заселение после шоу? –

+0

Вы заполняете список по умолчанию при инициализации формы? – Linga

+1

вы можете поместить код .show в верхнюю часть юнита, и перед этим просто добавьте ActiveDocument.ScreenUpdate = False и в конце суб-ActiveDocument.ScreenUpdate = True – Kathara

ответ

2
Sub make_combobox_form() 

    'Create the User Form as component first 
    Dim myFormComponent As VBComponent 
    Set myFormComponent = ThisWorkbook.VBProject.VBComponents.Add(vbext_ct_MSForm) 

    ' Get reference to user form from the UserForms collection then 
    Dim cb As MSForms.ComboBox 
    Dim myForm As Variant 
    Set myForm = VBA.UserForms.Add(myFormComponent.Name) 

    With myForm 
     .Width = 400 
     .Height = 300 
    End With 

    Set cb = myForm.Controls.Add("Forms.ComboBox.1") 
    With cb 
     .Top = 100 
     .Left = 100 
     .Height = 20 
     .Width = 200 
     .AddItem "Item_1" 
     .AddItem "Item_2" 
     .AddItem "Item_3" 
     .Value = "Item_1" 
    End With 

    myForm.Show 

    ThisWorkbook.VBProject.VBComponents.Remove myFormComponent 

End Sub 
Смежные вопросы