如何使用一个Userform事件过程(复选框单击)控制多个IF THEN语句?

时间:2015-09-16 22:55:10

标签: excel vba checkbox

嘿所以我是VBA的初学者,但这是我的困境:

使用VBA创建Excel用户表单 -

我有一个编号为1-8的组合框,显示供用户填写的文本框数量取决于组合框中选择的数字。

我还有一个复选框,当“TRUE”时,它允许用户为文本框的输出创建自定义标题。

例: 目标数量= 2
自定义标签目标? [x](真

目标1 :$ 1,000,000
 “新家”

目标2 :$ 50,000
“船”

我的问题是,我无法将自定义标签框的数量与所选目标的数量相同。因此,当目标数为2时,如果复选框为TRUE,则仍会显示8个自定义目标文本框。

我找到了使用下面代码的方法,但是当我输入第二个IF THEN语句时,第一个不再响应单击复选框:

Private Sub cbIMPLBL_Click()

If cboIMP.Value = "1" And cbIMPLBL.Value = "True" Then
   txtIMPLBL1.Visible = True
   txtIMPLBL2.Visible = False
   txtIMPLBL3.Visible = False
   txtIMPLBL4.Visible = False
   txtIMPLBL5.Visible = False
   txtIMPLBL6.Visible = False
   txtIMPLBL7.Visible = False
   txtIMPLBL8.Visible = False
Else
   txtIMPLBL1.Visible = False
   txtIMPLBL2.Visible = False
   txtIMPLBL3.Visible = False
   txtIMPLBL4.Visible = False
   txtIMPLBL5.Visible = False
   txtIMPLBL6.Visible = False
   txtIMPLBL7.Visible = False
   txtIMPLBL8.Visible = False
End If

If cboIMP.Value = "2" And cbIMPLBL.Value = "True" Then
   txtIMPLBL1.Visible = True
   txtIMPLBL2.Visible = True
   txtIMPLBL3.Visible = False
   txtIMPLBL4.Visible = False
   txtIMPLBL5.Visible = False
   txtIMPLBL6.Visible = False
   txtIMPLBL7.Visible = False
   txtIMPLBL8.Visible = False
Else
   txtIMPLBL1.Visible = False
   txtIMPLBL2.Visible = False
   txtIMPLBL3.Visible = False
   txtIMPLBL4.Visible = False
   txtIMPLBL5.Visible = False
   txtIMPLBL6.Visible = False
   txtIMPLBL7.Visible = False
   txtIMPLBL8.Visible = False
End If

End Sub

这里的任何帮助将不胜感激。 正如我刚刚开始的那样,我应该以不同的方式做到这一点,例如:不是单独写出所有这些,而是​​作为某种控制或功能(不确定该术语是什么)?

非常感谢!!!!

1 个答案:

答案 0 :(得分:0)

目前两个if语句都将触发。因此,如果cboIMP.Value =“1”,则它首先运行第一个if语句并取消隐藏第一个文本框。但它会立即运行第二个if语句,因为它不是“2”,它会隐藏文本框。

select case语句有两种选择,或if语句。

选择案例:

If cbIMPLBL.Value = "True" Then
    Select Case cboIMP.Value
        Case 1
            'hide/unhide for 1
        Case 2
            'hide/unhide for 2
        Case Else
            'Hide all
    End Select
End If

否则,如果

If cbIMPLBL.Value = "True" Then
    if cboIMP.Value = 1 then
       'do your stuff
    Else if cboIMP.Value = 2 then
       'do your stuff
    Else
       'hide everything
    end if
End If

这样一旦代码找到了真值,就会忽略所有其他代码。如果它没有找到任何真实的语句,则运行else。