如何在 vba 中动态设置文本到文本框?

How to set text dynamically to texbox in vba?

亲爱的 Whosebug 会员,

我尝试在用户表单中动态创建文本框并根据选项卡中的值设置默认文本。

首先用户像照片中那样填写文本框

当他单击上面的按钮时,它会调用在同一用户窗体中创建文本框的函数。与文本框的总值一样多,此外,对于值“0”,它计为要添加的 1 个文本框。

我想要的是当它遇到 0 值时,我希望创建新的文本框以将默认文本设置为 "null"。像这样:

我的代码:

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() 是一个包含左侧文本框值的选项卡。
但是我得到的结果看起来像这样:

我没有得到预期的那么多文本框。

我不明白我在哪里遗漏了什么。我想从中吸取教训,所以如果可能的话,请向我解释我在这里做错了什么,或者我的方法是否缺乏洞察力。

试试这个:

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 增量,因为您没有使用它。

我自己无法测试,但我认为它会解决重叠问题。