【问题标题】:If statement is not working in Excel VBA如果语句在 Excel VBA 中不起作用
【发布时间】:2018-03-25 17:10:17
【问题描述】:

我正在尝试使用 VBA 在 Excel 中创建一个简单的 if 语句。

我正在创建一个新复选框

将以下代码添加到框中。

Sub CheckBox1_Click()
   HideRows "2:5"
End Sub

Sub HideRows(rowRange)
If CheckBox1 = False Then
   Rows(rowRange).EntireRow.Hidden = True
   Else: Rows(rowRange).EntireRow.Hidden = False
   End If
End Sub

结果:无论复选框被选中还是未选中,行都被隐藏。

(复选框被选中)

所有行都可见

取消选中复选框

结果:所有行都被隐藏

(复选框未选中)

所有行都可见

取消选中复选框

结果:所有行都被隐藏

【问题讨论】:

    标签: vba excel checkbox


    【解决方案1】:

    假设它是一个 ActiveX CheckBox,把这段代码放在 Sheet Module...

    Private Sub CheckBox1_Click()
    If CheckBox1 = True Then
        Rows("2:5").Hidden = True
    Else
        Rows("2:5").Hidden = False
    End If
    End Sub
    

    编辑:

    或者就用这个……

    Private Sub CheckBox1_Click()
        Rows("2:5").Hidden = CheckBox1
    End Sub
    

    【讨论】:

    • 为什么不直接ActiveSheet.Rows("2:5").Hidden = CheckBox1.Value
    • @Mat'sMug 是的,这是真的。但这只是为了演示它是如何工作的,而不是找到实现最终结果的最短方法。您的建议实际上甚至不需要使用工作表引用对其进行限定,因为代码将位于工作表模块本身中。 :)
    • 没错 (+1) - 如果该代码在工作表的代码隐藏中,则适用的显式限定符将是 Me;可以说,活动工作表将/应该是该工作表,但是Me 在语义上比ActiveSheet 更合适...并且Me 始终是一个冗余限定符。
    【解决方案2】:

    您希望它在更改事件中。

    您不需要 If Then。 CheckBox1 rturns 一个 TRUE/FALSE,就使用它。

    并且在引用Rows() 时也不需要EntireRow。您已经在引用整行。

    此外,最好始终将父级声明为任何 Range 对象,Rows() 就是。如果代码在工作表代码中,则使用Me,因为它将引用自身。如果代码在模块中,则使用ActiveSheet 或更优选地是特定工作表Worksheets("Sheet1")

    Private Sub CheckBox1_Change()
        HideRows "2:5"
    End Sub
    
    
    
    Sub HideRows(rowRange)
       'if this code is not in the worksheet code then change `Me` to `ActiveSheet`
       Me.Rows(rowRange).Hidden = Not CheckBox1
    
    End Sub
    

    【讨论】:

    • 赞成指出If...Then 块和布尔分配的冗余...我将Rows 限定为ActiveSheet 并明确引用CheckBox1.Value 虽然;-)跨度>
    • 他说了什么^^^^
    • @Mat'sMug 但是,如果这是在工作表代码上,真的需要它还是Me 会更好?
    • 啊,是的,绝对 - 我一直假设组合框在用户窗体上:)
    • 我需要让this inspection and quickfix走上快车道!
    【解决方案3】:

    你可以把它放在一个 sub 中,假设它是一个 activeX 复选框

    Private Sub CheckBox1_Click()
    If CheckBox1 = True Then
        [2:5].EntireRow.Hidden = False
        Else: [2:5].EntireRow.Hidden = True
    End If
    End Sub
    

    【讨论】:

      猜你喜欢
      • 2023-03-04
      • 1970-01-01
      • 1970-01-01
      • 2012-08-13
      • 2018-10-20
      • 1970-01-01
      • 2016-08-05
      • 2018-05-11
      • 2012-12-26
      相关资源
      最近更新 更多