Снимите флажок CheckBox1, если один из нескольких других чечбоксов не отмечен - PullRequest
0 голосов
/ 18 апреля 2020

У меня есть UserForm1, состоящий из четырех Checkboxes:

CheckBox1 -> Основной флажок
CheckBox2 -> Sub Флажок
CheckBox3 -> Sub Флажок
CheckBox4 -> Sub Флажок

Теперь, если пользователь проверяет / снимает отметку CheckBox1, sub CheckBoxes 2-4 автоматически проверяется / снимается с помощью этого VBA:

Private Sub CheckBox1_Change()
If CheckBox1.Value = True Then
    CheckBox2.Value = True
    CheckBox3.Value = True
    CheckBox4.Value = True
Else
    CheckBox2.Value = False
    CheckBox3.Value = False
    CheckBox4.Value = False
End If
End Sub

Все это прекрасно работает.


Но теперь я хочу добиться этого в случае, если один из sub CheckBoxes 2-4 не будет проверен, main checkbox автоматически отключится и без снятия флажка с другого sub CheckBoxes.

Пример:
Пользователь сначала нажимает CheckBox1, а затем Checkboxes 2-4 автоматически проверяется.
Затем пользователь снимает флажки Checkbox2, а CheckBox1 автоматически снимается, в то время как Checkbox 3-4 остается отмеченным.

Примерно так:

Sub Check_Uncheck()
If any of Checkbox 2-4 is unchecked then
only uncheck CheckBox1 but do not change any other sub CheckBox
End

1 Ответ

4 голосов
/ 18 апреля 2020

используйте переменную UserForm, чтобы позволить изменениям обрабатывать события или нет их код:

Option Explicit

Dim blockChange As Boolean

Private Sub CheckBox1_Change()
    If Not blockChange Then
        blockChange = True
        If CheckBox1 Then
            CheckBox2.Value = True
            CheckBox3.Value = True
            CheckBox4.Value = True
        Else
            CheckBox2.Value = False
            CheckBox3.Value = False
            CheckBox4.Value = False
        End If
        blockChange = False
    End If
End Sub

Private Sub CheckBox2_Click()
    OnOff
End Sub

Private Sub CheckBox3_Click()
    OnOff
End Sub

Private Sub CheckBox4_Click()
    OnOff
End Sub


Private Sub OnOff()
    If Not blockChange Then
        blockChange = True
        CheckBox1.Value = CheckBox2 And CheckBox3 And CheckBox4
        blockChange = False
    End If
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...