Я создаю динамически Userform с помощью comboboxes и текстовых полей. по одному на каждую строку. Пользователь будет выбирать, сколько строк он хочет. Пока я могу настроить размер Userform в соответствии с количеством строк и создать первую строку. Но произошла ошибка для второй строки: Ошибка времени выполнения '-2147221005 (800401f3)': Неверная строка класса Результат Userform generated Вот мой код. для упрощения я выделил переменную строки к Nb = 3VBA создает несколько текстовых полей/comboboxes динамически в userform
Public Sub CommandButton2_Click()
Dim Nb As Integer 'Nb = number of people to record
Dim UF2 As Object
Dim TbHour, TbBin As msforms.TextBox 'txtbox for number of hours done and bins
Dim CBName As msforms.ComboBox 'List with names
Dim i 'i = loop to create rows
Nb = 3
Set UF2 = ThisWorkbook.VBProject.VBComponents.Add(3)
With UF2
.Properties("Caption") = "Packing record"
.Properties("Width") = "250"
.Properties("Height") = "50"
.Properties("Height") = .Properties("Height") * Nb + 10
End With
For i = 1 To Nb
Set CBName = UF2.Designer.Controls.Add("forms.combobox." & i) **'here is where the error happens on the second For/Next loop**
With CBName
.Name = "Combobox" & i
.Top = 0
.Top = .Top * i + 10
.Left = 10
.Width = 100
.Height = 20
End With
With UF2.CodeModule
.InsertLines 1, "Public sub userform_initialize()"
.InsertLines 2, "Me.ComboBox1.AddItem (""1"")"
.InsertLines 3, "End sub"
End With
Set TbHour = UF2.Designer.Controls.Add("forms.textbox." & i)
With TbHour
.Top = 0
.Top = .Top * i + 10
.Left = 120
.Width = 50
.Height = 20
End With
Next i
i = i + 1
Set TbBin = UF2.Designer.Controls.Add("forms.textbox." & i)
With TbBin
.Top = 10
.Top = .Top * i
.Left = 180
.Width = 50
.Height = 20
End With
VBA.UserForms.Add(UF2.Name).Show
ThisWorkbook.VBProject.VBComponents.Remove UF2
End Sub
Почему бы просто не объявить переменную 'New ComboBox' и' .Add' этот объект? –
Как вы это пишете? До сих пор я всегда использовал «controls.add (« forms.xxxx.1 ») ' – MCircular
В упрощенных выражениях, которые соответствуют комментарию ...' Me.Controls.Add (New ComboBox) ' –