Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vba 使用for循环初始化所有文本框_Vba_Excel_Loops_Textbox_Controls - Fatal编程技术网

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

Vba 使用for循环初始化所有文本框,vba,excel,loops,textbox,controls,Vba,Excel,Loops,Textbox,Controls,我有一个userform的初始化。当我使用代码中注释掉的部分进行初始化时,它工作得很好,但是当我使用如下所示的代码时,会出现运行时错误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.Valu

我有一个userform的初始化。当我使用代码中注释掉的部分进行初始化时,它工作得很好,但是当我使用如下所示的代码时,会出现运行时错误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

通常,要引用表单的
TextBox
,您需要
控件(“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
使用此屏幕截图,显示每个文本框的值为1、2、3或4以及绿色:

或者,如果您希望使控件的外观有所不同,请执行以下操作:

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


如果您按照自己的编程逻辑命名文本框,然后在控件集合中循环并检查控件的
TypeName
是更好的解决方案。

在普通模块中创建一个过程:

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()中调用它。

控件(“TextBox”&i)=“
将是在循环中执行此操作的方法