Страницы: 1
RSS
Обработка идентичных кнопок в UserForm
 
Всем здравия.
Сразу оговорюсь – мой макрос работает. Но есть момент, который выглядит весьма громоздко. Решаю такую вот задачу:
Моя форма UserForm имеет 29 одинаковых блоков Frames, в каждом из которых есть 9 нажимаемых объектов. Для упрощения работы с ними я присвоил им названия исходя из их функционала. Например, для Frame1 это:
PredmetComboBox1, PedNagruzkaTextBox1, OptionBottonOB1, OptionBottonOS1, RazriadComboBox1, TetradTextBox1, KabinetTextBox1, RukovodTextBox1, MetodTextBox1.
Для Frame2, соответственно:
PredmetComboBox2, PedNagruzkaTextBox2, OptionBottonOB2, OptionBottonOS2, RazriadComboBox2, TetradTextBox2, KabinetTextBox2, RukovodTextBox2, MetodTextBox2.
Ну, и так далее до 29. Изменение данных любого из перечисленных объектов должно отслеживаться, для чего пришлось написать 29*9=261 процедуру...  8-0
Помогите, пожалуйста, привести это в более изящное компактное состояние.
Изменено: nak_igor - 19.08.2019 17:10:04
 
Код
Private Sub PredmetComboBox2_Change ()
       Call общая_процедура (передаваемые параметры)
End Sub

Private Sub общая_процедура (принимаемые параметры)
       здесь_работаем
End Sub
 
Так у меня и реализовано. Для этого написано 261 процедура с реакцией на изменение свойства _Change.
Я имел ввиду, есть ли возможность написать их 9 и прокрутить по циклу 29 раз?
Изменено: nak_igor - 19.08.2019 17:18:05
 
Написать класс. Пример в файле ускоряет помощь.
Цитата
29 одинаковых блоков Frames
Не всегда оправдано. Возможно, тоже приводится к одному блоку?

ListBox с предметами, поля для ввода значений, ListBox с результатом.
Выбираем предмет, вносим значения, сохраняем запись (добавляется во второй список). После обработки/корректировки второго  списка сохраням данные куда надо..
Это зависит от задачи. Ну, и вопрос для другой темы.
 
код

рисунок формы
 
Цитата
nak_igor написал:
написать их 9 и прокрутить по циклу 29 раз
вполне возможно, что здесь классы будут в самый раз: Работа с модулями классов
Даже самый простой вопрос можно превратить в огромную проблему. Достаточно не уметь формулировать вопросы...
 
Модули классов это единственно верный вариант, потому что даже если вывести основной обработчик в одну процедуру, все равно потребуется 261 событие что бы эту процедуру вызвать, а модули классов все эти процедуры вызова сокращают в разы.
"Все гениальное просто, а все простое гениально!!!"
 
Цитата
Nordheim написал: Модули классов это единственно верный вариант
Да, если по проблеме, описанной в названии темы. А по сути практической я категорически не согласен.
Цитата
vikttur написал: ListBox с предметами, три поля для ввода значений, ListBox с результатом.
Простой пример: добавляется предмет. Добавлть 30-й блок или дополнить программно список ListBox?
 
Вероятно, Вы не совсем уловили суть, а я от вопроса в сторону не уходил.
Список предметов в UserForm не динамический. Не стоит только такая задача просто вбить преподаваемые позиции и сопутствующие им параметры. Нужно всё это ещё и визуально контролировать по каждому из преподавателей (первое поле вверху для выборки ФИО), а также периодически вносить изменения. Поэтому была создана избыточная таблица (БД) на 29 строк – 3 страницы по десятку.

P.S. Файл примера выслан быть не может ввиду гигантности файла с зарплатой, где все листы взаимозависимы друг от друга. Поковыряю мозг по ссылке от Дмитрий(The_Prist) Щербаков.
Изменено: nak_igor - 20.08.2019 09:24:06
 
Возможно.
Зайдите в личку.
 
nak_igor, я бы тоже глянул файл. Интересно. Может, загрузите на файлообменник?
Улыбнись.
 
Цитата
falmrom написал:
Может, загрузите на файлообменник?
Разработку по зарплате организации???  8)  
 
Цитата
Дмитрий(The_Prist) Щербаков написал:
вполне возможно, что здесь классы будут в самый раз: Работа с модулями классов
Дмитрий , ещё раз спасибо за именно эту конкретную ссылку.  :idea:
Всё, что до этого по модулям классов выдал мне интернет, у меня не работало.

Теперь моя простынь из 261 процедуры сузилась то 9.  :excl:
Скрытый текст
Изменено: nak_igor - 28.08.2019 16:49:26
 
nak_igor, кнопка sp - спрячьте простыню под спойлер
Страницы: 1
Наверх