Страницы: 1
RSS
Помогите сделать зависимые checkboxы
 
Добрый вечер. Есть такая необходимость, сделать, чтобы чекбоксы были зависыме.    
В примере их 4 штуки, нужно чтобы при нажатии на один из 4х остальные 3 блокировались для простановки галочки. Насколько я поимаю, нужно макрос прикрутить, а с ними я не силен.    
Заранее спасибо за помощь.
 
Убирайте чекбоксы - они для этого не предназначены. И ставьте переключатель - тогда и макрос не понадобится. <BR>Пример в файле: http://excelvba.ru/XL_Files/Sample__22-09-2010__21-57-42.zip
 
или используйте элементы activeX
Спасибо
 
А если так :)
 
можно и так обратиться  
ActiveSheet.Shapes("Check Box 1").Select  
   Selection.Value = True или False  
но зачем
Спасибо
 
{quote}{login=R Dmitry}{date=22.09.2010 08:29}{thema=}{post}можно и так обратиться  
ActiveSheet.Shapes("Check Box 1").Select  
   Selection.Value = True или False  
но зачем{/post}{/quote}  
так ведь лучше
Спасибо
 
Спасибо большое за подсказки, а теске R Dmitry в особенности ;) все легко и просто оказалось как всегда.  
Я под себя макрос немного изменил только:  
Private Sub CheckBox2_Click()  
If CheckBox1 = True Then CheckBox2 = False  
If CheckBox1 = True Then CheckBox2 = False  
If CheckBox1 = True Then CheckBox2 = False  
End Sub  
Private Sub CheckBox3_Click()  
If CheckBox1 = True Then CheckBox3 = False  
If CheckBox1 = True Then CheckBox3 = False  
If CheckBox1 = True Then CheckBox3 = False  
End Sub  
Private Sub CheckBox4_Click()  
If CheckBox1 = True Then CheckBox4 = False  
If CheckBox1 = True Then CheckBox4 = False  
If CheckBox1 = True Then CheckBox4 = False  
End Sub  
 
и усе заработало так как надо, завтра буду на основном файле эксперементировать.  
Доброй ночи!
 
Jeff, а зачем Вы каждую проверку делаете трижды?
 
Jeff, не будут у Вас работать ЧекБоксы как нужно. Прислушайтесь к совету EducatedFool – тогда код не понадобится. Но если по каким-либо причинам это невозможно, то переделайте Ваш код:  
 
Private Sub CheckBox1_Click()  
If CheckBox1 = True Then CheckBox2 = False: CheckBox3 = False: CheckBox4 = False  
End Sub  
Private Sub CheckBox2_Click()  
If CheckBox2 = True Then CheckBox1 = False: CheckBox3 = False: CheckBox4 = False  
End Sub  
Private Sub CheckBox3_Click()  
If CheckBox3 = True Then CheckBox1 = False: CheckBox2 = False: CheckBox4 = False  
End Sub  
Private Sub CheckBox4_Click()  
If CheckBox4 = True Then CheckBox1 = False: CheckBox2 = False: CheckBox3 = False  
End Sub
 
{quote}{login=Юрий М}{date=23.09.2010 12:08}{thema=}{post}Jeff, а зачем Вы каждую проверку делаете трижды?{/post}{/quote}  
ну, я еще не силен в написании макросов, поэтому по логике решил что так будет работать, я понимаю, что варианты решения проблемы есть, но убрать все чекбоксы не получится, так как их в файле около сотни, и каждый записывает в опрделенную ячейку свое значение ложь/истина, а потом на основе этих значений почти все формулы выдают расчет, т.ч. это все переделывать. Если бы делал сам с начала а не переделывал, сделал бы по другому, а так вариантов не много.
 
Да, и по непонятным причинам файл EducatedFool не хочет скачиваться и соотв. посмотреть что там не реально =(    
Может это траблы рабочего компа конечно...
 
Да не за что просто условие у Вас такое было "нужно чтобы при нажатии на один из 4х остальные 3 блокировались для простановки галочки"  
поэтому так и сделал  
80588
Спасибо
 
"так как их в файле около сотни" - Вам надо из сотни один отмеченным гарантировать? Если так, подход нужно менять.
 
{quote}{login=Jeff}{date=23.09.2010 08:49}{thema=Re: }{post}{quote}{login=Юрий М}{date=23.09.2010 12:08}{thema=}{post}Jeff, а зачем Вы каждую проверку делаете трижды?{/post}{/quote}ну, я еще не силен в написании макросов, поэтому по логике решил что так будет работать{/post}{/quote}  
Разговор о другом:    
If CheckBox1 = True Then CheckBox2 = False  
If CheckBox1 = True Then CheckBox2 = False  
If CheckBox1 = True Then CheckBox2 = False  
Зачем три одинаковых строки? Получается, что Вы трижды утверждаете, что 2+2=4.  
Достаточно написать одну строку - Excel поймёт :-)  
И неплохо бы чётче формулировать задачу, а то R Dmitry, например, понял так, я - иначе. Hugo тоже склоняется к "моему" варианту. Вы мой код пробовали применить?
 
Если из сотни надо оставить один:  
Private Sub CheckBox1_Click()  
For x = 1 To 100  
If x <> 1 Then ActiveSheet.OLEObjects("CheckBox" & x).Visible = CheckBox1 + 1  
Next  
End Sub  
 
Private Sub CheckBox2_Click()  
For x = 1 To 100  
If x <> 2 Then ActiveSheet.OLEObjects("CheckBox" & x).Visible = CheckBox2 + 1  
Next  
End Sub  
 
Так на каждый чекбокс надо только в двух местах код менять.  
Но правда так все неотмеченные просто скрываются - надо позаботится, чтоб они были False.
 
К сожалению не получилось у меня приладить код R Dmitry к своему примеру, т.к. у R Dmitry, как я понял, это элемент уже другого типа, и он не может выдавать в определнной ячейкй еще и состояние ложь/истина    
{quote}{login=Hugo}{date=23.09.2010 09:16}{thema=}{post}"так как их в файле около сотни" - Вам надо из сотни один отмеченным гарантировать? Если так, подход нужно менять.{/post}{/quote}  
Из сотни есть 10 чекбоксов, может меньше, которые должны при выборе в 11-м чекбоксе положения "истина" блокироваться, остальные 89 живут своей жизнью ложь/истина. И повоторюсь, проблема в том, что файл был сдела давно, и все переделать в нем на новый лад не получится, сроки поджимают.
 
Такой вариант, с блокировкой:  
 
Private Sub CheckBox2_Click()  
For x = 1 To 4  
Select Case x  
Case 3, 4  
ActiveSheet.OLEObjects("CheckBox" & x).Enabled = CheckBox2 + 1  
End Select  
Next  
End Sub  
 
Как раз рассчитано на один из 11 повесить. Блокируются по выбору сколько хошь. Но с тем значением, какое в них есть.
 
"это элемент уже другого типа, и он не может выдавать в определнной ячейкй еще и состояние ложь/истина" - это утверждение ошибочно: в свойствах элемента показываете ячейку и будет там Вам всё показывать. И Ложь, и Истину...
 
{quote}{login=Hugo}{date=23.09.2010 10:13}{thema=}{post}Такой вариант, с блокировкой:  
post}{/quote}  
Hugo, извиняюсь за наглость, а не могли бы Вы на моем первоначальном примере это сделать, а то я немного не понимаю кода.  
 
{quote}{login=Юрий М}{date=23.09.2010 10:21}{thema=}{post}...это утверждение ошибочно: в свойствах элемента показываете ячейку и будет там Вам всё показывать. И Ложь, и Истину...{/post}{/quote}  
Юрий, я что-то в св-вах не могу этого найти. Правильно делаю? Запускаю в VBA режим "Дезигн Мод" правой кнопкой на элемент, там св-ва, а вот дальше... там куча настроек: цвета, размер, положение, а вот где там указать что записывать состояние в определенную ячейку листа?
 
Не увлекайтесь цитированием - результат Вы видите. Такова особенность движка форума.  
По вопросу: для файла R Dmitry: Вид - Панели инструментов - Элементы управления. Включаем режим конструктора, выделяем нужный ЧекБокс, нажимаем кнопку Свойства - ищем строку LinkedCell и пишем там адрес ячейки.
 
{quote}{login=Юрий М}{date=23.09.2010 10:39}{thema=}{post}Не увлекайтесь цитированием - результат Вы видите. ....{/post}{/quote}  
да, цитаты есть, а сообщения самого нет, ладно...    
Юрий, к сожалению не получается, прописываю в файле R Dmitry в LinkedCell адрес ячейки как Вы сказали, к примеру Лист1М5, чекбокс блокируется и больше ничего нельзя с ним сделать.    
Hugo, извниюсь за наглость, а не могли бы вы приладить написанный Вами код к моему файликуЮ, тот что в первом сообщении. ЧТобы к примеру при нажатии на 2 чекбокс, блокировались 3й и 4й, а первый оставался независимы. Заранее благодарен.
 
Вот.  
Но там на 3 и 4 тоже код сидит, его не берите во внимание. :)
 
Посмотрите как правильно вводить адрес ячейки где должно быть размещено ИСТИНА или ЛОЖЬ Можно и без указания листа просто A1 (A - английское)
Спасибо
 
Да и похоже что Вы забываете выйти из режима конструктора :)  
13171
Спасибо
 
{quote}{login=Jeff}{date=23.09.2010 11:14}{thema=Re: }{post}{quote}{login=Юрий М}{date=23.09.2010 10:39}{thema=}{post}{/post}{/quote} чекбокс блокируется и больше ничего нельзя с ним сделать. {/post}{/quote}  
Дмитрий, скорее всего прав - Вы не выключаете режим конструктора.
 
{quote}{login=R Dmitry}{date=23.09.2010 11:53}{thema=}{post}Да и похоже что Вы забываете выйти из режима конструктора :)  
13171{/post}{/quote}  
Юрий, да, так оно и было =)  
Всем ОГРОМНОЕ спасибо за помощь!  
И повоторюсь в очередной раз, спасибо создателям за такой полезный ресурс!
Страницы: 1
Читают тему
Наверх