/ / додавання декількох міток і текстових посилань до форми користувача Excel під час виконання за допомогою vba - excel, vba, excel-vba, userform

додавання декількох етикеток та текстових слів у формат user Excel під час виконання vba-excel, vba, excel-vba, userform

Я "" створюю інструмент управління запасами з Excel VBA. Я створив код, який збирає список імен з випадаючого списку в Internet Explorer і поміщає їх в масив.

введіть опис зображення тут

Що мені потрібно зробити, це щось подібне vba створює декілька текстових полів, що об'єднуються, у динамічному режимі в userform, але я буду динамічно додавати мітки для імен користувачів і текстових полів для кількості FLN, які кожна людина буде отримувати. Потім вони перейдуть у попередньо визначену форму користувача, яку я вже створив.

введіть опис зображення тут

За прикладом коду вище, я розумію, що не можу використовувати .Name = "Textbox" & i щоб перейменувати наступну мітку або текстове поле. i має дорівнювати постійно змінюваному списку, тому він не може бути встановлений в камені; UBound(UserArray).

ОНОВЛЕНО

Private Sub CreateControl()
Dim newTxt As msforms.Control, newLbl
Dim i As Integer, TopAmt
Dim UserArray As String

TopAmt = 30

For i = LBound(MyArray) + 1 To UBound(MyArray) - 1
Set newLbl = MultipleOptionForm.Controls.Add("Forms.Label.1")
With newLbl
.Name = "Label" & i
.Left = 10
.Top = TopAmt
.WordWrap = False
.AutoSize = True
.Visible = True
.Caption = MyArray(i)
Debug.Print .Name,
End With

Set newTxt = MultipleOptionForm.Controls.Add(bstrProgID:="Forms.Textbox.1", Name:="Textbox" & i)
With newTxt
.Left = 150
.Top = TopAmt
.Visible = True
.Width = 20
Debug.Print .Name
End With
TopAmt = TopAmt + newTxt.Height
Next

MultipleOptionForm.Show
End Sub

Будь-які пропозиції, як це зробити, якщо це можливо? Я не хотів би використовувати таблицю Excel для досягнення цієї мети.

Відповіді:

2 для відповіді № 1

Лу відповідь на це питання вводить в оману. Питання хоче надати ім'я за замовчуванням при додаванні елемента керування, змінюючи його ProgID (bstrProgID - це рядок, який посилається на клас, який буде створено).

Нові елементи керування можна перейменувати за умови, що інший елемент керування не має однакової назви.

Також можна передавати ім'я елементів керування як аргумент до Controls.Add метод

Ваші мітки не показуються, що ви ніколи не встановлювали Label.Caption вартість

введіть опис зображення тут

Private Sub CreateControl()
Dim newLbl As MSForms.Label
Dim newTxt As MSForms.Control
Dim i As Integer, TopAmt
Dim UserArray As Variant

TopAmt = 50
UserArray = Array("Cat", "Dog", "Horse", "Gorrilla")

For i = LBound(UserArray) To UBound(UserArray)
Set newLbl = MultipleOptionForm.Controls.Add("Forms.Label.1")
With newLbl
.Name = "Label" & i
.Left = 50
.Top = TopAmt
.Visible = True
.Caption = UserArray(i)
Debug.Print .Name,
End With

Set newTxt = MultipleOptionForm.Controls.Add(bstrProgID:="Forms.Textbox.1", Name:="Textbox" & i)
With newTxt
.Left = 100
.Top = TopAmt
.Visible = True
Debug.Print .Name
End With
TopAmt = TopAmt + newTxt.Height
Next
End Sub

Наступний випуск: як отримати дані з цих динамічно створених текстових полів?

Dim newTxt As MSForms.Control
For i = LBound(UserArray) To UBound(UserArray)
set newTxt  =  MultipleOptionForm.Controls("Textbox" & i)
If UserArray(i) <> newTxt.Value then
"Do something
End if
Next