如果语句在Excel VBA中不起作用
Iam尝试使用VBA在Excel中创建一个简单的if语句。如果语句在Excel VBA中不起作用
我正在创建一个新复选框
将下列代码添加到框中。
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
结果:如果复选框处于选中状态或未选中状态,则行都将隐藏。
(复选框被选中)
所有行可见
取消选中该复选框
结果:所有行被隐藏
(复选框选中)
的所有行可见
取消选中t他复选框
结果:所有行被隐藏
你可以把此一子,假设它的一个ActiveX复选框
Private Sub CheckBox1_Click()
If CheckBox1 = True Then
[2:5].EntireRow.Hidden = False
Else: [2:5].EntireRow.Hidden = True
End If
End Sub
假设它的一个ActiveX复选框,放在板模块的代码.. 。
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
你想在一个改变事件。
你不需要如果那么。 CheckBox1
发生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
Upvoted用于指出'If ... Then'块和布尔赋值的冗余度......我用'ActiveSheet'限定'Rows'并显式引用'CheckBox1.Value'虽然;-) –
他说,^^^^ – Tom
@ Mat'sMug,但如果这是在表格代码是真的需要或'我'会更好? –
为什么不只是'ActiveSheet.Rows。( “2:5”)隐藏= CheckBox1.Value'? –
@ Mat'sMug是的,的确如此。但只是为了展示它如何工作,而不是找到最短的方法来实现最终结果。因为代码将位于工作表模块本身中,所以实际上甚至不需要使用工作表参考资格。 :) – sktneer
这是正确的(+1) - 如果该代码位于工作表的代码隐藏中,则适用的显式限定符将为“Me”;尽管如此,活动表会/应该是*表格*,但是'Me'在语义上比'ActiveSheet'更合适......并且'Me'总是一个冗余限定符。 –