Сохранение данных из программно добавленного текстового окна vba

97
9

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

В настоящее время у меня есть функция, которая делает это, однако я не могу сохранить значения текстовых полей. Я попытался ссылаться на текстовые поля несколькими способами, но ни один из них не работает (несмотря на те же методы, которые работают раньше в отдельном коде, хотя текстовые поля не были программно добавлены)

Function addtxtbox(number_of_textboxes As Integer)

Dim option_names As New UserForm2
Dim names As String
Dim test As String
Dim textbox As Object
Dim submit As Object

For i = 1 To number_of_textboxes
Set textbox = option_names.Controls.Add("Forms.textbox.1")
With textbox
.Left = 30
.Width = 200
.Top = 20 * i
.Left = 20
End With

MsgBox (textbox.Name)'used to find the name of the textboxes

Next

option_names.Show

names = "TextBox1" 'correct name of the 1st textbox according to the msgbox above.
MsgBox (names) 'msgbox is always blank
test = option_names.names 'Compile error: Method or data members not found
'test = textbox.TextBox1.Value 'run time error 418 object does not support this property or method
MsgBox (test)

End Function

спросил(а) 2021-01-19T15:55:40+03:00 2 месяца, 3 недели назад
1
Решение
136

Легче назвать ваши текстовые поля предсказуемой последовательностью:

For i = 1 To number_of_textboxes

Set textbox = option_names.Controls.Add("Forms.textbox.1")
With textbox
.Left = 30
.Width = 200
.Top = 20 * i
.Left = 20
.Name = "dynamic_" & i '<<<<<<< name the textbox
End With

MsgBox (textbox.Name)'used to find the name of the textboxes

Next

Теперь вы можете использовать что-то вроде:

For i = 1 To number_of_textboxes

MsgBox "Textbox# " & i & " has value '" & _
Me.Controls("dynamic_" & i).Text & "'"

Next

ответил(а) 2021-01-19T15:55:40+03:00 2 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема