Динамическое создание форм на VBA

Автор: | 21.01.2020

Одной из лучших книг по VBA является книга Джона Уокенбаха «Профессиональное программирование на VBA в Excel 2002». У этого автора есть такая же книга и для более поздних версий Excel.

Сейчас появилась возможность кое-что вспомнить по применению VBA.  Сам Уокенбах относится к динамическому созданию форм как к не имеющему практической пользы приёму. Но это не всегда так.

Например, сейчас я решил потратить часть своего времени на создание некоего модуля на VBA по заполнению таблиц мониторинга по кадрам по школе. Таких кадровых таблиц около 10. Главное связать все расчеты периодов и количества лет к конкретной дате. Конечно, для этого сначала надо иметь выверенную базу данных по каждому учителю школы, чтобы создавать правильно заполненные листы Excel, содержащие отдельные таблицы по кадрам. После получения отчетов в Excel  останется тупо перенести данные руками на сайт мониторинга.

Для ведения базы данных необходимо иметь модуль заполнения и корректировки данных по каждому учителю. Так как полей может быть множество, то появляется уже смысл в динамическом создании формы ввода и корректировки данных.

Все предлагаемые сейчас в Интернете методы оказались или неработоспособны, или в них надо долго разбираться, или надо каждый раз регистрироваться на сайте, чтобы получить доступ к выложенным файлам. Поэтому я и обратился к указанной выше книге и автору. Советы от него и предлагаемые макросы просто прекрасны.

Предлагаю переделанный модуль для динамического программирования конкретной формы.  Возникла лишь одна проблема с именами контролов. Их изменить программно не получается, поэтому я и пошёл по пути получения имён TextBox через текст в них.

У меня всё работает. До сих пор я использую по старинке офис 2003, хотя опробовал в работе и 2016, у которого очень много дополнительных возможностей. В примере список полей берётся с последнего листа, а сам этот список получен транспонированием шапки.

Шапка – пока лишь некоторая заготовка.

What are you working on?

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Лимит времени истёк. Пожалуйста, перезагрузите CAPTCHA.