【问题标题】:Initializing all textboxes with a for loop使用 for 循环初始化所有文本框
【发布时间】:2018-07-22 15:46:33
【问题描述】:

我有一个用户窗体的初始化。当我使用代码的注释掉部分进行初始化时它工作正常,但是当我使用如下所示的代码时,我得到一个运行时错误 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

【问题讨论】:

  • Controls("TextBox" & i) = "" 将是循环执行此操作的方式

标签: vba excel loops textbox controls


【解决方案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 和绿色:

或者甚至这个,如果你想让控件的外观有点不同:

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 是一个更好的解决方案。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-08
      • 2013-09-03
      • 1970-01-01
      • 2021-08-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多