2014-11-17 2 views
0

На листе 6 флажков.Как проверить/снять отметку со всех остальных флажков в электронной таблице и скрыть/показать некоторые столбцы?

первая часть:

Каждый чекбокс (кроме первого) используется, чтобы скрыть/отобразить столбец.

вторая часть:

Первые проверки Флажок/неустановленными другие флажки и при проверке он позволяет отобразить столбцы от А до Е, а когда снят он скрывает их.

Подводя итог:

checkbox-1: check/uncheck other 5 checkboxes and unhide/hide columns A-E 
checkbox-2: hide/unhide column A 
checkbox-3: hide/unhide column B 
checkbox-4: hide/unhide column C 
checkbox-5: hide/unhide column D 
checkbox-6: hide/unhide column E 

Я попытался код ниже, чтобы скрыть/показать столбцы при флажков 2-6 щелчка. Это сработало. Но как я сделаю вторую часть?

Sub CheckBox_Click() 

    Dim vis As Boolean, ac As String, col As String 

    ac = Application.Caller 

    With ActiveSheet 

     vis = (.Shapes(ac).ControlFormat.Value = 1) 

     Select Case ac 
      Case "checkbox-2": col = "A" 
      Case "checkbox-3": col = "B" 
      ... 
     End Select 

     If col <> "" Then .Columns(col).Hidden = vis 

    End With 

End Sub 

ответ

0

Connect коробка 2-6 макроса CheckTheBoxes и поле 1 к макро InvertTheBoxes.

InvertTheBoxes проходит через формы листов. Каждая форма, которая не является «ящиком 1», будет проверена/снята и будет выполняться макросом CheckTheBoxes. Если на листе больше фигур, вам нужно немного изменить код. Но вот неизмененный ответ:

Option Explicit 

'checkbox-1: check/uncheck other 5 checkboxes and unhide/hide columns A-E 
'checkbox-2: hide/unhide column A 
'checkbox-3: hide/unhide column B 
'checkbox-4: hide/unhide column C 
'checkbox-5: hide/unhide column D 
'checkbox-6: hide/unhide column E 

Dim Vis As Boolean, Col$, Shp As Shape 

Sub CheckTheBoxes(Optional ByVal AC$) 
    ' If a checkbox runs this code, it will use Application.Caller, 
    ' since the AC string would be emtpy. 
    ' This way, you can run this macro from another macro (InvertTheBoxes), 
    ' provided you return the shape name (which that macro does). 
    If AC = "" Then AC = Application.Caller 

    With ActiveSheet 
     Vis = (.Shapes(AC).ControlFormat.Value = 1) 

     Select Case AC 
      Case "checkbox-2": Col = "A" 
      Case "checkbox-3": Col = "B" 
      Case "checkbox-4": Col = "C" 
      Case "checkbox-5": Col = "D" 
      Case "checkbox-6": Col = "E" 
     End Select 

     If Col <> "" Then .Columns(Col).Hidden = Vis 

    End With 
End Sub 

Sub InvertTheBoxes() 
Dim AC2$ 
    AC2 = Application.Caller 
    With ActiveSheet 
     For Each Shp In .Shapes 
      If Shp.Name <> AC2 Then 
       ' Change the checkbox status (from checked to unchecked and vice versa) 
       If Shp.ControlFormat.Value = 1 Then 
        Shp.ControlFormat.Value = -4146 ' Unchecked 
       Else 
        Shp.ControlFormat.Value = 1 ' Checked 
       End If 
       CheckTheBoxes Shp.Name ' Call the hide/show procedure 
      End If 
     Next Shp 
    End With 
End Sub 

Если вы хотите перебрать формы с конкретными именами, попробуйте этот InvertTheBoxes2 макрос вместо:

Sub InvertTheBoxes2() 
Dim AC2$ 
    AC2 = Application.Caller 
    With ActiveSheet 
     For Each Shp In .Shapes 
      ' Will only loop through shapes starting with "checkbox-" 
      If Left(Shp.Name, 9) = "checkbox-" And Shp.Name <> AC2 Then 
       ' Change the checkbox status (from checked to unchecked and vice versa) 
       If Shp.ControlFormat.Value = 1 Then 
        Shp.ControlFormat.Value = -4146 ' Unchecked 
       Else 
        Shp.ControlFormat.Value = 1 ' Checked 
       End If 
       CheckTheBoxes Shp.Name ' Call the hide/show procedure 
      End If 
     Next Shp 
    End With 
End Sub 

Просто убедитесь, что остальные флажки имеют разные имена, то есть «СВО -1 "," cbo-2 "и т. Д. Или попробуйте называть их еще более тщательно.

Смежные вопросы