Страницы: 1
RSS
При нажатии на ToggleButton1 все остальные ToggleButtons на форме должны принять значение false кроме ToggleButton1
 
Как отжать все эти ToggleButtons понятно, но как, при нажатии на ToggleButton1 на форме, "отжать" все остальные ToggleButton, при этом оставить значение ToggleButton1 = true? Подскажите?

В примере, все ToggleButton отжимаются, т.е. принимают значение false.  
Изменено: НСС - 28.05.2020 23:30:58
 
Код
Private Sub ToggleButton1_Click()
  Dim x As Control
  Application.EnableEvents = False
  For Each x In UserForm1.Controls
    If TypeOf x Is msforms.ToggleButton Then x.Value = False
  Next
  ToggleButton1 = True
  Application.EnableEvents = True
End Sub
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, появляется сообщение Out of stack space.  
 
У меня сообщение не появляется, но наблюдается рекурсия.
 
таки-да(((
а так:
Код
Private Sub ToggleButton1_Click()
  Dim x As Control
  For Each x In UserForm1.Controls
    If TypeOf x Is msforms.ToggleButton _
     And x.Name <> "ToggleButton1" Then x.Value = False
  Next
  ToggleButton1 = True
End Sub
Изменено: Ігор Гончаренко - 29.05.2020 02:05:39
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
Ігор Гончаренко, да, так работает. Спасибо большое!
 
Теперь другая проблема. Если добавить макрос в ToggleButton3, например, то опять появляется сообщение Out of stack space. Т.е. в два ToggleButton добавил макрос.
Код
Option Explicit

Private Sub ToggleButton1_Click()

  Dim x As Control
  Application.EnableEvents = False
  For Each x In UserForm1.Controls
    If TypeOf x Is msforms.ToggleButton _
     And x.Name <> "ToggleButton1" Then x.Value = False
  Next
  ToggleButton1 = True
  Application.EnableEvents = True

End Sub
Код
Private Sub ToggleButton3_Click()
  Dim x As Control
  Application.EnableEvents = False
  For Each x In UserForm1.Controls
    If TypeOf x Is msforms.ToggleButton _
     And x.Name <> "ToggleButton3" Then x.Value = False
  Next
  ToggleButton3 = True
  Application.EnableEvents = True

End Sub
Изменено: НСС - 29.05.2020 01:11:52
 
все решаемо)
а для начала можете удалить строки с Application.EnableEvents = ...
это никак не решает вашу задачу, но реально эти строки там не нужны
Программисты - это люди, решающие проблемы, о существовании которых Вы не подозревали, методами, которых Вы не понимаете!
 
ToggleButton1 = True 'нафига это? Всегда делать его нажатым?
Код
Option Explicit
Dim IsNonEvents as boolean
Private Sub ToggleButton1_Click()
  if ToggleButton1 = false then exit sub 'ничего не делаем, если кнопка была отжата
  if IsNonEvents then exit sub
  Dim x As Control
  
  For Each x In UserForm1.Controls
    If TypeOf x Is msforms.ToggleButton then
     IsNonEvents = True
     if x.Name <> "ToggleButton1" Then x.Value = False
     IsNonEvents = false
    end if
  Next
End Sub
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Все отлично работает. Спасибо за помощь!  
Страницы: 1
Наверх