使用 for 循环初始化所有文本框
Initializing all textboxes with a for loop
我有一个用户窗体的初始化。当我使用代码的注释部分进行初始化时它工作正常,但是当我使用如下所示的代码时,出现运行时错误 91。
我需要一种循环遍历或select所有文本框的方法,为它们提供默认值、颜色等...
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
的表格,你需要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
是更好的解决方案。
在普通模块中制作程序:
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() 中调用它。
我有一个用户窗体的初始化。当我使用代码的注释部分进行初始化时它工作正常,但是当我使用如下所示的代码时,出现运行时错误 91。
我需要一种循环遍历或select所有文本框的方法,为它们提供默认值、颜色等...
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
的表格,你需要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
是更好的解决方案。
在普通模块中制作程序:
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() 中调用它。