Страницы: 1
RSS
Private Sub CheckBox1_Click()
 
День добрый.  
Пытаюсь сделать из CheckBox группу переключателей  
Вот в этом варианте работает, возможен многократный выбор значений  
Private Sub CheckBox1_Click()  
CheckBox1 = True  
CheckBox2 = Empty  
CheckBox3 = Empty  
End Sub  
Private Sub CheckBox2_Click()  
CheckBox1 = Empty  
CheckBox2 = True  
CheckBox3 = Empty  
End Sub  
Private Sub CheckBox3_Click()  
CheckBox1 = Empty  
CheckBox2 = Empty  
CheckBox3 = True  
End Sub  
 
А вот в этом нет:  
Private Sub CheckBox1_Click()  
CheckBox1 = True  
CheckBox2 = False  
CheckBox3 = False  
End Sub  
Private Sub CheckBox2_Click()  
CheckBox1 = False  
CheckBox2 = True  
CheckBox3 = False  
End Sub  
Private Sub CheckBox3_Click()  
CheckBox1 = False  
CheckBox2 = False  
CheckBox3 = True  
End Sub  
 
Здесь в случае, когда при открытии формы задается CheckBox2 = True  
возможно однократное изменение по CheckBox3_Click, а по CheckBox1_Click даже и однократного нет.  
 
В чем причина?
 
> Пытаюсь сделать из CheckBox группу переключателей  
 
Это делается с помощью OptioButton-ов. Объедините их в группу, и ничего программировать не надо:
 
Казанский  
Спасибо!  
Я помню группу переключателей из 97 Аксесса (там есть такой элемент  управления).  
Но то, что там используются OptioButton-ны, а не CheckBox-сы, забыл.  
Но с применением CheckBox так и не разобрался.  
При использовани  
Private Sub CheckBox1_Click()  
CheckBox1 = True  
CheckBox2 = False  
CheckBox3 = False  
End Sub  
Private Sub CheckBox2_Click()  
CheckBox1 = False  
CheckBox2 = True  
CheckBox3 = False  
End Sub  
Вроде бы событие Click в отличие от событий Change, AfterUpdate, BeforeUpdate долхно возникать только по Click по CheckBox.  
Однако при Click  CheckBox1 (или др.CheckBox) макрос зацикливается, и не желает выходить из CheckBox & i_Click.    
CheckBox всего 8.  
При использовании CheckBox_BeforeUpdate работает вроде правильно, кроме перехода с CheckBox2 (UserForm_Activate() CheckBox2 = True) к CheckBox3. При этом переходе флажок с CheckBox2 не снимается, на CheckBox3 флажок устанавливается, но при дальнейшей обаботке значение CheckBox2 = False, а CheckBox3 = True.
 
Да, получается, что изменение значения чекбокса вызывает событие Click.  
Кстати, в коде чекбокса можно не устанавливать его самого, это сделает сам клик:  
 
Public bNonEvents As Boolean  
Private Sub CheckBox1_Click()  
If bNonEvents Then Exit Sub  
bNonEvents = True  
'CheckBox1 = True  
CheckBox2 = False  
CheckBox3 = False  
bNonEvents = False  
End Sub  
Private Sub CheckBox2_Click()  
If bNonEvents Then Exit Sub  
bNonEvents = True  
CheckBox1 = False  
'CheckBox2 = True  
CheckBox3 = False  
bNonEvents = False  
End Sub  
 
Private Sub CheckBox3_Click()  
If bNonEvents Then Exit Sub  
bNonEvents = True  
CheckBox1 = False  
CheckBox2 = False  
'CheckBox3 = True  
bNonEvents = False  
End Sub
 
Мне не приспичило, и вариант с "OptioButton, Объединить их в группу" меня вполне устраивает.  
Просто я никак не пойму, почему событие Click в CheckBox возникает не только при клике по CheckBox, но и при программном изменении значения CheckBox.  
А Ваш код весьма интересен.
 
Перечитав еще раз понял несоответствие:  
" 3-ий не циклится потому что для него обработки нет."  
 
При событии Click циклятся все.  
При событии BeforeUpdate не циклится никто.
Страницы: 1
Читают тему
Наверх