Страницы: 1
RSS
Помогите оптимизировать код, Пытаюсь сократить код формы, нужно решение
 
Добрый день!

Программирование на VBA осваиваю методом научного тыка.
Есть программа, на форме куча кнопок, которые по нажатию скрывают определенные строки в таблице.
При этом есть определенная зависимость, если включены одни кнопки, то некоторые другие должны быть неактивны и наоборот.
Вот пример кода только для одной кнопки, а их два десятка, соответственно огромное кол-во кода. Думаю можно как-то решить вопрос по-другому, но моих знаний не хватает, прошу помощи.

Код
Private Sub ButAC_Change()

If ButAC.Value = False Then           
       Range("blokac").EntireRow.Hidden = True
       ButAC.Caption = "Âêë."
       ButAM.Enabled = True
      If ButAM.Value = False Then
      If ButSA.Value = False Then
      If ButSAR.Value = False Then
      If ButSG05.Value = False Then
      If ButSQ.Value = False Then
      If ButSQR.Value = False Then
      If ButSQEX.Value = False Then
      If ButSQREX.Value = False Then
         ButACEX.Enabled = True
         ButAMEXC.Enabled = True        
         ButSAEX.Enabled = True
         ButSAREX.Enabled = True
         ButSGEXC.Enabled = True
         ButSQREX.Enabled = True
         ButSQEX.Enabled = True
          
      End If
      End If
      End If
      End If
      End If
      End If
      End If
      End If
      
   Else
       Range("blokac").EntireRow.Hidden = False
       ac
       ButAC.Caption = "Âûêë."
       ButACEX.Enabled = False
       ButAMEXC.Enabled = False
       ButSAEX.Enabled = False
       ButSAREX.Enabled = False
       ButSGEXC.Enabled = False
       ButSQREX.Enabled = False
       ButSQEX.Enabled = False
       ButAM.Enabled = False
   
   End If

End Sub
 
 
По скриншоту и куску кода, ничем тут не помочь
Выкладывайте файл, - тогда, возможно, будут идеи.

Чтобы упростить код, - скорее всего, макросы придется переписывать «с нуля»
 
Мне не супер критично уменьшить кол-во кода, если потребуются кардинальные изменения, тогда эту затею оставлю.
Просто думал, может быть я очевидно неправильно что-то делаю и есть способы попроще.
 
Цитата
Евгений пишет:
если включены одни кнопки, то некоторые другие должны быть неактивны и наоборот.
Вам в любом случае придётся указывать имена необходимых кнопок для совместной работы
Мастерство программиста не в том, чтобы писать программы, работающие без ошибок.
А в том, чтобы писать программы, работающие при любом количестве ошибок.
 
Можно не указывать все имена, а перебирать все существующие и отбирать некоторые по критерию.
Например у всех кнопок одной группы одинаковые тэги - перебираем все, а с нужным тэгом включаем (или наоборот).
Изменено: Hugo - 23.01.2015 14:25:52
 
Плюс(в дополнение к мысли Hugo) все это можно обернуть в классы: Работа с модулями классов
чтобы не прописывать вызов процедуры для каждой кнопки.
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
А почему бы состояние кнопок не описывать вектором из 0 и 1. Каждое число соответствует одному переключателю. И сделать одну функцию, которая обрабатывала бы этот вектор и взводила бы в соответствии с ним кнопки. И тогда в функции нажатии кнопки прописываешь нужный вектор и вызываешь эту одну функцию.
(на самом деле для экономии места можно было бы работать с числом Long в двоичном формате и оперировать одним числом, а не вектором)
Типа {0,1,0,0,1,1,1}
Изменено: wowick - 23.01.2015 15:00:22
Если автоматизировать бардак, то получится автоматизированный бардак.
 
Евгений, название темы ни о чем.
Предложите название темы, отражающее задачу.
Страницы: 1
Читают тему
Наверх