2015-09-01 5 views
2

Я пытаюсь использовать фигуру вместо кнопки для переключения строк с пустыми ячейками (в соответствии с условиями). Возможно ли это?Excel VBA - Использование фигур в качестве переключающих кнопок

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 

ответ

1

Да, это возможно. Код, чтобы выполнить то, что я думаю, что вы ищете, приведен ниже. Обе части кода ниже предполагают, что вы хотите просто нажать кнопку, чтобы скрыть/отобразить строки в зависимости от текущего состояния.

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 
+0

Благодарим вас за решение, а также за альтернативу. Извините мой вопрос из двух частей, но можно ли использовать форму, как включение/выключение? –

+0

Если вы действительно хотите использовать фигуры, вы можете сделать это одним из двух способов. 1) Добавьте еще одну фигуру и поместите код за ней, чтобы отобразить строки в (или нефильтрации) диапазона. 2) Поместите какой-то триггер в ячейку или текстовое поле, которое срабатывает, если оно включено или выключено, когда вы нажимаете фигуру. –

+0

Я вижу. Еще раз спасибо. –