Excel VBA – 使用形状作为切换button

我试图用一个形状而不是一个button来切换隐藏的行与空白单元格(根据条件)。 这甚至有可能吗?

Sub ToggleChevron3_Click() Dim rng As Range, cell As Range Set rng = Range("A1:C100") Application.ScreenUpdating = False With rng For Each cell In rng If cell.Offset(0, 4).Value = "" Then ' Condition 1 If cell.Value = "" Then ' Condition 2 ActiveSheet.Shapes("Chevron 3").cell.EntireRow.Hidden _ = Not ActiveSheet.Shapes("Chevron 3").cell.EntireRow.Hidden End If End If Next End With Application.ScreenUpdating = True End Sub 

对的,这是可能的。 完成我认为你正在寻找的代码如下。 下面的两段代码假设您只想单击一个button来隐藏/取消隐藏行,这取决于当前的状态。

 Sub ToggleChevron3_Click() Application.ScreenUpdating = False Dim rng As Range, cell As Range 'Set rng = Range("A1:C100") 'do you really want to loop through every cell in columns A through C Set rng = Range("A1:A100") For Each cell In rng If Len(cell.Offset(, 4).Value) = 0 And Len(cell.Value) = 0 Then Dim bToggle As Boolean bToggle = cell.EntireRow.Hidden cell.EntireRow.Hidden = Not bToggle End If Next Application.ScreenUpdating = True End Sub 

不过,只要过滤对您来说没有问题,还有更简洁的代码和更快的执行。

 Sub ToggleChevron3_Click() Application.ScreenUpdating = False Dim bToggle As Boolean bToggle = ActiveSheet.AutoFilterMode If bToggle Then ActiveSheet.AutoFilterMode = False Else Dim rng As Range Set rng = Range("A1:E100") 'used E because you had an offset of 4 columns With rng .AutoFilter 5, "<>" .AutoFilter 1, "<>" End With End If Application.ScreenUpdating = True End Sub