контроль флажков Excel - PullRequest
       2

контроль флажков Excel

0 голосов
/ 20 ноября 2018

Я полный новичок в VBA.

Я создал несколько флажков в Excel (не активен X), и я хотел бы сделать особый вид контроля: у меня есть флажки с именами A, B, C иDI хотел бы сделать один (или более) макрос VBA, который бы выполнял: Если B отмечен / не отмечен, то C и D отмечены / не отмечены Если A отмечен / не отмечен, тогда B, C и D отмечены / не проверены

Я попробовал следующее для всего элемента управления:

Sub BoucleCheckBoxes_Formulaire()
Dim Cb As CheckBox

'Boucle sur les checkboxes formulaires de la Feuil1
For Each Cb In ActiveSheet.CheckBoxes
    'si la case est cochée
    '(utilisez xlOff pour vérifier le statut "décoché")
    If Cb.Value = xlOn Then
        Cb.Value = xlOff
    Else
        If Cb.Value = xlOff Then
            Cb.Value = xlOn
        End If
    End If
Next Cb

End Sub

Но у меня есть проблема: флажок, связанный с макросом, всегда проверяется (хотя при каждом нажатии другойфлажки состояния переключаются, как и ожидалось), вероятно, потому что он включен в цикл, как и другие флажки.На самом деле я хотел бы иметь возможность применить состояние флажка к определенному и ограниченному списку других флажков

Я не смог найти, можно ли выбрать группу флажков в зависимости от их положения или имени

может кто-нибудь помочь, пожалуйста

спасибо

Вот полное решение из ответа :

Я создаю четыре флажка,Случай 1, Случай 2, Случай 3, Случай 4.

Случай 1 управляет тремя другими одновременно: когда включено => все включено, когда выключено => все выключено.

Каждый издругие могут переключаться индивидуально: когда «Выкл.», «Случай 1» становится «Выкл.», когда «Вкл.», если другой режим «Вкл.», переключается на «Случай 1».

Вот макросы, используемые для этого:

Sub Case_1_Cliquer()

    c1 = ActiveSheet.CheckBoxes("Case 1").Value

    If c1 = xlOff Then
        ActiveSheet.CheckBoxes("Case 2").Value = xlOff
        ActiveSheet.CheckBoxes("Case 3").Value = xlOff
        ActiveSheet.CheckBoxes("Case 4").Value = xlOff
    ElseIf c1 = xlOn Then
        ActiveSheet.CheckBoxes("Case 2").Value = xlOn
        ActiveSheet.CheckBoxes("Case 3").Value = xlOn
        ActiveSheet.CheckBoxes("Case 4").Value = xlOn
    End If

End Sub

Sub Case2_Cliquer()
    c2 = ActiveSheet.CheckBoxes("Case 2").Value
    c3 = ActiveSheet.CheckBoxes("Case 3").Value
    c4 = ActiveSheet.CheckBoxes("Case 4").Value

    If c2 = xlOff Then
        ActiveSheet.CheckBoxes("Case 1").Value = xlOff
    End If

    If c2 = xlOn Then
        If ((c3 = xlOn) And (c4 = xlOn)) Then
            ActiveSheet.CheckBoxes("Case 1").Value = xlOn
        End If
    End If
End Sub

Sub Case3_Cliquer()
    c2 = ActiveSheet.CheckBoxes("Case 2").Value
    c3 = ActiveSheet.CheckBoxes("Case 3").Value
    c4 = ActiveSheet.CheckBoxes("Case 4").Value

    If c3 = xlOff Then
        ActiveSheet.CheckBoxes("Case 1").Value = xlOff
    End If

    If c3 = xlOn Then
        If ((c2 = xlOn) And (c4 = xlOn)) Then
            ActiveSheet.CheckBoxes("Case 1").Value = xlOn
        End If
    End If
End Sub

Sub Case4_Cliquer()
    c2 = ActiveSheet.CheckBoxes("Case 2").Value
    c3 = ActiveSheet.CheckBoxes("Case 3").Value
    c4 = ActiveSheet.CheckBoxes("Case 4").Value

    If c4 = xlOff Then
        ActiveSheet.CheckBoxes("Case 1").Value = xlOff
    End If

    If c4 = xlOn Then
        If ((c3 = xlOn) And (c2 = xlOn)) Then
            ActiveSheet.CheckBoxes("Case 1").Value = xlOn
        End If
    End If
End Sub

1 Ответ

0 голосов
/ 20 ноября 2018

Вы можете попробовать этот код;Я рекомендую проверить его в новом файле, и если он работает, вы можете встроить его в свой фактический файл.

Вы можете выполнить следующие шаги

  1. Создать флажки
  2. Назначьте им подходящие имена, которые будут использоваться для ссылки на них в vba
  3. Щелкните правой кнопкой мыши каждый флажок, который вы хотите использовать в качестве триггера, и назначьте им макросы, которые будут вызываться при нажатии на них

Я создал 4 флажка, назвав их CHB_A, CHB_B, CHB_C и CHB_D

enter image description here

Ниже приведен макросчто вы можете назначить для флажка A, и когда он будет нажат, этот макрос будет называться

Sub CHB_A_Click()

    chb_a = ActiveSheet.CheckBoxes("CHB_A").Value

    If chb_a = xlOff Then
        ActiveSheet.CheckBoxes("CHB_B").Value = xlOff
        ActiveSheet.CheckBoxes("CHB_C").Value = xlOff
        ActiveSheet.CheckBoxes("CHB_D").Value = xlOff
    ElseIf chb_a = xlOn Then
        ActiveSheet.CheckBoxes("CHB_B").Value = xlOn
        ActiveSheet.CheckBoxes("CHB_C").Value = xlOn
        ActiveSheet.CheckBoxes("CHB_D").Value = xlOn
    End If

End Sub

Я проверил ваш код, и он переключает состояние всех флажков

ДляВаше заявление «Флажок, связанный с макросом, всегда отмечен (хотя при каждом щелчке состояние других флажков переключается, как и ожидалось)» *

Это потому, что если вы щелкнете по одному и отметите / снимите флажок, он сразудобраться догуглил снова, так как код переключает состояние всех флажков.Вы не увидите разницу.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...