Как динамически установить текст на texbox в VBA? - PullRequest
0 голосов
/ 01 марта 2019

Уважаемые члены StackOverFlow-members,

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

Сначала пользователь заполняет текстовые поля, как вФотоfirst_stepКогда он нажимает кнопку выше, он вызывает функцию, которая создает текстовые поля в той же форме пользователя.Точно столько же, сколько сумма значений текстовых полей, кроме того, для значения "0" он считается как 1 текстовое поле для добавления.

То, что я хочу, - это когда встречается значение 0. Я хочу, чтобы новый текстовый ящик создавал для значения по умолчанию текст как "ноль".Вот так :result_expected

Мой код:

For i = 0 To UBound(tabValTextBox)
            valTemp = tabValTextBox(i)
            If valTemp = 0 Then
                iTextBoxMasqueA = iTextBoxMasqueA + 1
                Set textBoxCableA = UserForm1.Controls.Add("Forms.TextBox.1")
                colTextBoxCableA.Add textBoxCableA
                With textBoxCableA
                    .Name = "cable" & iTextBoxCableA
                    .Top = iTextBoxCableA * textBoxCableA.Height + 50
                    .Left = 150
                    .Text = "Nul"
                End With
            Else
                For j = 0 To valTemp - 1
                    iTextBoxCableA = iTextBoxCableA + 1
                    Set textBoxCableA = UserForm1.Controls.Add("Forms.TextBox.1")
                    colTextBoxCableA.Add textBoxCableA
                    With textBoxCableA
                        .Name = "cable" & iTextBoxCableA
                        .Top = iTextBoxCableA * textBoxCableA.Height + 50
                        .Left = 150
                    End With
                Next j

            End If
        Next i

tabValTextbox() - это вкладка, содержащая значения левых текстовых полей.Однако результат, который я получаю, выглядит так:result_reachedЯ не получаю столько текстовых полей, как ожидалось.Я не понимаю, где я что-то упускаю.Я хочу извлечь уроки из этого, поэтому, если возможно, объясните мне, что я делаю не так, или если мой подход не хватает понимания.

1 Ответ

0 голосов
/ 01 марта 2019

Попробуйте это:

For i = 0 To UBound(tabValTextBox)
    valTemp = tabValTextBox(i)
    iTextBoxCableA = iTextBoxCableA + 1
    If valTemp = 0 Then
        Set textBoxCableA = UserForm1.Controls.Add("Forms.TextBox.1")
        colTextBoxCableA.Add textBoxCableA
        With textBoxCableA
            .Name = "cable" & iTextBoxCableA
            .Top = iTextBoxCableA * textBoxCableA.Height + 50
            .Left = 150
            .Text = "Nul"
        End With
    Else
        For j = 0 To valTemp - 1
            Set textBoxCableA = UserForm1.Controls.Add("Forms.TextBox.1")
            colTextBoxCableA.Add textBoxCableA
            With textBoxCableA
                .Name = "cable" & iTextBoxCableA
                .Top = iTextBoxCableA * textBoxCableA.Height + 50
                .Left = 150
            End With
        Next j
    End If
Next i

Я переместил инкремент iTextBoxCableA за пределы нулевого условия и полностью удалил инкремент iTextBoxMasqueA, поскольку вы его не использовали.

Я не могу проверить это сам, но думаю, что это решит проблему дублирования.

...