如果勾选复选框,是否有方法选择文本框输入?VBA Excel
正如您在下图中所看到的,我有几个代表度量的复选框,最后两个复选框应该允许其他度量。前面的文本框允许用户指定其度量值的名称 我能够使用以下代码成功地将勾选复选框的名称(标题)发送到列表框:如果勾选复选框,是否有方法选择文本框输入?VBA Excel,vba,checkbox,userform,Vba,Checkbox,Userform,正如您在下图中所看到的,我有几个代表度量的复选框,最后两个复选框应该允许其他度量。前面的文本框允许用户指定其度量值的名称 我能够使用以下代码成功地将勾选复选框的名称(标题)发送到列表框: Dim ctrl As Control For Each ctrl In Me.Controls If TypeName(ctrl) = "CheckBox" Then If ctrl.Value = True Then ListBox1.
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
If ctrl.Value = True Then
ListBox1.AddItem ctrl.Caption
End If
End If
Next ctrl
但是,如果用户选中“附加度量”复选框,我希望将他们在文本框中输入的内容添加到列表框中,而不是复选框标题
有什么方法可以做到这一点吗?因此,我尝试按照SJR的建议使用更多的if语句,效果很好
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
If ctrl.Value = True Then
If ctrl.Caption = "Additional Metric 1 (Specify Metric)" Then
ListBox1.AddItem TextBox3.Value
ElseIf TypeName(ctrl) = "CheckBox" Then
If ctrl.Value = True Then
If ctrl.Caption = "Additional Metric 2 (Specify Metric)" Then
ListBox1.AddItem TextBox4.Value
Else
ListBox1.AddItem ctrl.Caption
End If
End If
End If
End If
End If
Next ctrl
有什么办法可以简化这一点吗?:) 因此,我尝试按照SJR的建议使用更多的if语句,效果很好
Dim ctrl As Control
For Each ctrl In Me.Controls
If TypeName(ctrl) = "CheckBox" Then
If ctrl.Value = True Then
If ctrl.Caption = "Additional Metric 1 (Specify Metric)" Then
ListBox1.AddItem TextBox3.Value
ElseIf TypeName(ctrl) = "CheckBox" Then
If ctrl.Value = True Then
If ctrl.Caption = "Additional Metric 2 (Specify Metric)" Then
ListBox1.AddItem TextBox4.Value
Else
ListBox1.AddItem ctrl.Caption
End If
End If
End If
End If
End If
Next ctrl
有什么办法可以简化这一点吗?:) 为了使代码保持简单,您可能需要使用
标记
s而不是标题
s
Private子命令按钮1\u单击()
Dim-ctl作为对照
对于Me.Controls中的每个ctl
如果TypeName(ctl)=“复选框”,则
如果ctl.Value和ctl.Tag为“”,则
ListBox1.AddItem ctl.Tag
如果结束
如果结束
下一个ctl
端接头
专用子文本框1_Change()
Me.CheckBox4.Tag=Me.TextBox1.Text
端接头
专用子文本框2_Change()
Me.CheckBox5.Tag=Me.TextBox2.Text
端接头
编辑:添加了条件
和ctl.Tag”“
为了保持代码简单,您可能需要使用标记
s而不是标题
s
Private子命令按钮1\u单击()
Dim-ctl作为对照
对于Me.Controls中的每个ctl
如果TypeName(ctl)=“复选框”,则
如果ctl.Value和ctl.Tag为“”,则
ListBox1.AddItem ctl.Tag
如果结束
如果结束
下一个ctl
端接头
专用子文本框1_Change()
Me.CheckBox4.Tag=Me.TextBox1.Text
端接头
专用子文本框2_Change()
Me.CheckBox5.Tag=Me.TextBox2.Text
端接头
编辑:添加了条件
和ctl.Tag”“
添加如果ctrl.name=“whatever”然后ListBox1.AddItem ctrl.value
@SJR,我尝试了,但不起作用。是的,很抱歉,这不对,您需要引用文本框值。因此,如果复选框和文本框名称相关,这将使操作更简单,否则您需要更多的Ifs。添加一个如果ctrl.name=“whatever”,然后ListBox1.AddItem ctrl.value
@SJR,我尝试了,但不起作用。是的,很抱歉,这不对,您需要引用文本框值。因此,如果复选框和文本框名称相关,这将使它更简单,否则您需要更多的if。您不需要ElseIf TypeName(ctrl)=“CheckBox”,然后是行。它将始终返回true,因为您已经在第一个If语句中选中了该复选框。如果ctrl.Value=True,则还需要第二行,因为这也将始终计算为True。不需要ElseIf TypeName(ctrl)=“CheckBox”然后
行。它将始终返回true,因为您已经在第一个If语句中选中了该复选框。如果ctrl.Value=True,则还需要第二行,因为该行也将始终计算为True。