Страницы: 1
RSS
Событие для группы элементов управления с похожим именем, Выполнить событие для определенных контролов, не перебирая все, находящиеся на форме
 
Приветствую, уважаемые эксперты!
Прошу оказать помощь в решении следующей задачи:
  • Имеется форма.
  • Главный элемент управления, определяющий, что за параметры попадут в таблицу является multipage.
  • На каждой странице multipage находятся элементы управления, часть из которых имеет однотипное имя (txtD_19; txtD_20 и т.д.)
  • По нажатию на кнопку "Добавить"  - определяется в какой столбец добавить данные и затем они заносятся в таблицу.
На данный момент, разработанный мной макрос проверят все названия элементов на вкладке на соответствие маске, например like "txtD_*" и заносит данные в определенный столбец на основании названия элемента.

Так как в реальном проекте элементов управления много, то быстродействие такого способа не очень устраивает.
Пробовал прописывать код под каждый TextBox, быстродействие лучше, однако терпения писать код под каждый TextBox у меня не хватает, тем более, что каждый TextBox надо еще и проверить.

В уме я представляю себе следующий вариант решения:
Объединить в массив набор нужный элементов и проводить проверку только по элементам в этом массиве, а не на всей форме.
Однако, как реализовать такой алгоритм я не знаю и очень надеюсь на вашу помощь.

Прикладываю минимизированный пример.
Изменено: Valo - 04.01.2019 10:25:18
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
РАБОТА С МОДУЛЯМИ КЛАССОВ
Пример в статье как раз для TextBox'ов
Согласие есть продукт при полном непротивлении сторон
 
Sanja, данную статью я читал. По моему она не очень подходит для моего случая.
По данной статье, у меня получилось сделать проверку вводимых данных в определенные тексбоксы.
Хотя честно сказать, проверку данных мне хотелось бы проводить в момент нажатия кнопки "Добавить", а не прямо во время ввода в текстбокс.
Ну и как занести данные в таблицу используя модуль класса я тоже не очень представляю.
Изменено: Valo - 04.01.2019 10:35:50
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Я бы так сделал:
В модуле Классов для TextBox'ов, на событие Change, прописал добавление значения этого TextBox'а в виртуальный массив. Позицию для значения в массиве можно брать из свойства Tab (предварительно настроив их в нужной последовательности). По нажатию кнопки - выгружаем этот массив на Лист  
Согласие есть продукт при полном непротивлении сторон
 
Код
for a=1 to 20
  if len(me.controls("TextBox" & a).value)>0 then msgbox "Здесь что-то есть!"
next
 
Sanja, спасибо за подсказку! Как же мне сразу-то не пришло в голову присвоить значение при событии change  :sceptic: .
Результата добиться удалось, еще раз огромное спасибо!
Изменено: Valo - 04.01.2019 11:53:47
Наша суть отражается в наших повторяющихся действиях. Отсюда следует, что совершенство есть не действие, а привычка. Аристотель.
 
Может быть пригодится: я в похожих случаях использую свойство Tag контрола - на этапе создания присваиваю этому свойству, например, номер столбца, в который следует выгружать значение.
Страницы: 1
Наверх