如果勾选复选框,是否有方法选择文本框输入?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。