如何在vba中将文本动态设置为texbox?

时间:2019-03-01 10:49:12

标签: excel vba textbox userform

尊敬的StackOverFlow成员,

我尝试在用户窗体中动态创建texbox,并根据选项卡中的值设置默认文本。

首先,用户填写图片中的文本框
first_step
当他单击上方的按钮时,它将调用在同一用户窗体中创建文本框的函数。恰好等于文本框值的总数,此外,对于值“ 0”,它算作要添加的1个文本框。

我想要的是当它遇到0值时,我希望创建的新texbox将defaut文本设置为“ null”。像这样:
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 :(得分:1)

尝试一下:

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增量。

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