【问题标题】:Is there a way to select a TextBox input if a checkbox is ticked? VBA Excel如果勾选了复选框,有没有办法选择文本框输入? VBA Excel
【发布时间】:2021-03-31 05:12:15
【问题描述】:

如下图所示,我有几个代表措施的复选框,最后两个应该允许附加措施。前面的文本框允许用户指定其度量的名称。

我能够使用以下代码成功地将勾选的复选框的名称(标题)发送到列表框:

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

但是,如果用户选择“附加措施”复选框,我希望将他们在文本框中输入的内容添加到列表框中,而不是复选框标题。

有什么办法可以做到吗?

【问题讨论】:

  • 添加if ctrl.name="whatever" then ListBox1.AddItem ctrl.value
  • @SJR,我试过了,但没用。
  • 是的,对不起,这不对,您需要引用文本框的值。
  • 因此,如果复选框和文本框名称相关,这将使其更简单,否则您需要更多 Ifs。

标签: vba checkbox userform


【解决方案1】:

为保持代码简单,您可能希望使用Tags 而不是Captions

Private Sub CommandButton1_Click()
    Dim ctl As Control
    For Each ctl In Me.Controls
        If TypeName(ctl) = "CheckBox" Then
            If ctl.Value And ctl.Tag <> "" Then
                ListBox1.AddItem ctl.Tag
            End If
        End If
    Next ctl
End Sub

Private Sub TextBox1_Change()
    Me.CheckBox4.Tag = Me.TextBox1.Text
End Sub

Private Sub TextBox2_Change()
    Me.CheckBox5.Tag = Me.TextBox2.Text
End Sub

编辑:添加条件And ctl.Tag &lt;&gt; ""

【讨论】:

    【解决方案2】:

    所以我尝试按照 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
    

    有什么方法可以简化这个吗? :)

    【讨论】:

    • 您不需要ElseIf TypeName(ctrl) = "CheckBox" Then 行。它将始终返回 true,因为您已经在第一个 If 语句中检查了它是一个复选框。您还需要第二个 If ctrl.Value = True Then 行,因为它也将始终评估为 true。
    猜你喜欢
    • 2014-03-12
    • 1970-01-01
    • 1970-01-01
    • 2018-02-10
    • 2019-08-23
    • 2015-12-06
    • 2019-05-23
    • 1970-01-01
    • 2012-07-30
    相关资源
    最近更新 更多