使用for循环初始化所有文本框

时间:2018-02-12 12:56:32

标签: vba excel-vba loops textbox controls

我有一个用户表单的初始化。当我使用代码的注释部分进行初始化时,它工作正常,但是当我使用如下所示的代码时,我得到运行时错误91.

我需要一种循环或选择所有文本框的方法来为它们提供默认值,颜色等...

Private Sub UserForm_Initialize()
Dim i As Long
Dim ctl As Control
For i = 1 To 4
    ctl = "TextBox" & i
    ctl.Value = ""
Next i
'TextBox1.Value = ""
'TextBox2.Value = ""
'TextBox3.Value = ""
'TextBox4.Value = ""
End Sub

2 个答案:

答案 0 :(得分:1)

通常,要引用表单的TextBox,您需要Controls("TextboxN)。如果你想循环,就像这样 - Me.Controls("Textbox" & i),如果你没有删除任何文本框并且它们遵循默认顺序 因此,这是一种可能性:

Private Sub UserForm_Initialize()

    Dim i As Long
    Dim ctl As Control
    For i = 1 To 4
        Me.Controls("Textbox" & i) = i
        Me.Controls("Textbox" & i).BackColor = vbGreen
    Next i

    Debug.Print Me.TextBox3.Value

End Sub

使用此屏幕截图,显示每个TextBox的值为1,2,3或4,并显示绿色:

enter image description here

或者甚至是这样,如果你想让控件的前景有点不同:

Private Sub UserForm_Initialize()

    Dim i       As Long
    Dim ctl     As Control

    For i = 1 To 4
        With Me.Controls("Textbox" & i)
            .Value = i
            If i Mod 2 = 0 Then
                .BackColor = vbBlue
                .ForeColor = vbWhite
            Else
                .BackColor = vbGreen
                .BackColor = vbRed
            End If
        End With
    Next i

End Sub

enter image description here

如果您按照自己的编程逻辑命名文本框,那么循环访问控件集并检查控件的TypeName是一个更好的解决方案。

答案 1 :(得分:1)

在正常模块中制作程序:

Sub LoopTxBox()
    Dim tb As MSForms.Control

    For Each tb In UserForm1.Controls
        If TypeName(tb) = "TextBox" Then   'capitalisation matters
            '...
        End If
    Next tb

End Sub

并在UserForm_Initialize()中调用它。