Пользовательская форма для ввода в рабочий лист с использованием циклов для подмножества некоторых текстовых полей

Пользователь может ввести до 10 участников одновременно. Столбец A будет «Название команды». Столбец B будет «Количество участников». Столбец C будет «Имя участника». Это работает для If Else, но мне утомительно делать это 10 раз. Я не знаю, как изменить его с If Else на For Loop

'Using If Else
    Dim RowCount As Long
    RowCount = Worksheets("Sheet1").Range("A1").CurrentRegion.Rows.Count
    If txtNoMember.Value = 1 Then
        With Worksheets("Sheet1").Range("A1")
            .Offset(RowCount, 0).Value = txtTeamName.Text
            .Offset(RowCount, 1).Value = txtNoMember.Text
            .Offset(RowCount, 2).Value = txtMember01.Text
        End With
    ElseIf txtNoMember.Value = 2 Then
        With Worksheets("Sheet1").Range("A1")
            .Offset(RowCount, 0).Value = txtTeamName.Text
            .Offset(RowCount, 1).Value = txtNoMember.Text
            .Offset(RowCount, 2).Value = txtMember01.Text
            .Offset(RowCount + 1, 0).Value = txtTeamName.Text
            .Offset(RowCount + 1, 1).Value = txtNoMember.Text
            .Offset(RowCount + 1, 2).Value = txtMember02.Text
        End With
    End If

'Using For Loop
    Dim counter As Integer
    Dim times As Integer
    Dim RowCount As Long
    RowCount = Worksheets("Sheet1").Range("A1").CurrentRegion.Rows.Count
       For counter = 1 To txtNoMember.Value
            times = txtNoMember.Value - 1
            With Worksheets("Sheet1").Range("A1")
                .Offset(RowCount + times, 0).Value = txtTeamName.Text
                .Offset(RowCount + times, 1).Value = txtNoMember.Text
                .Offset(RowCount + times, 2).Value = txtMember01.Text
            End With

person Gervina    schedule 15.11.2013    source источник
comment
Попробуйте получить доступ к элементам управления формой по имени: <FormName>.Controls("txtMember" & xx).Text, предполагая, что xx — это последние 2 цифры txtMemberXX. Вам нужно выработать отношение txtNoMember.Value к строке ячейки   -  person PatricK    schedule 15.11.2013


Ответы (1)


Как я уже сказал, доступ к элементам управления можно получить с помощью <FormName>.Controls(<ControlName>). Демонстрация с помощью простой формы:

UserForm1

Код:

Private Sub CommandButton1_Click()
    Dim i As Long, m As Long

    m = CLng(txtNoMember.Value)
    For i = 1 To m
        Debug.Print UserForm1.Controls("TextBox" & Format(i, "00")).Value
    Next
End Sub

При вводе 10 в txtNoMember и нажатии командной кнопки Immediate Window дает:

ImmediateWindow

Теперь вам нужно потренироваться в математике между i-м членом и индексом цикла для строки, чтобы сохранить значение.

Грубый вид кода, который вы бы использовали (текстовые поля от 01 до 10):

.Offset(RowCount + times, 0).Value = <FormName>.Controls("txtMember" & Format(times + 1, "00")).Text

person PatricK    schedule 15.11.2013