Основная функция TextBox - ввод и отображение текстовой информации. Он может быть использован для ввода данных, отображения текстовых сообщений и вывода результатов вычислений.
Сегодня подробно рассмотрим: как использовать элемент управления TextBox на пользовательской форме и как его заполнить.
📢 Скачать исходник с примером кода вы можете в конце статьи 🔽
▶️ Элемент управления TextBox
- Размещение на форме: TextBox можно добавить на пользовательскую форму через режим конструктора форм в редакторе VBA. Это делается путем выбора элемента управления TextBox из панели элементов управления и его размещения на форме:
- Свойства и методы: TextBox имеет разнообразные свойства и методы для настройки его "поведения" и внешнего вида. Например, установить максимальную длину вводимого текста, определить многострочное поле ввода, изменить шрифт и цвет текста.
- События: TextBox поддерживает различные события, которые могут быть использованы для реагирования на действия пользователя. Например, использовать событие "Change", чтобы выполнять код при изменении содержимого TextBox.
- Чтение и запись значений: Чтобы получить текст, введенный пользователем в TextBox следует использовать свойство .Value элемента управления. Аналогично, можно установить значение TextBox через это свойство:
- Многострочный режим: TextBox может быть настроен в многострочном режиме, что позволяет вводить и отображать несколько строк текста:
- Ограничение ввода: Вы можете ограничить ввод определенными символами, числами или другой информацией, используя свойства, методы и обработку событий. Например, запретить ввод с клавиатуры:
- Стилизация и внешний вид: Вы можете изменять внешний вид TextBox, настраивая его цвет, рамки, шрифт и другие атрибуты, чтобы соответствовать дизайну вашего приложения:
- Интерактивность и интеграция с другими элементами: TextBox может взаимодействовать с другими элементами управления на пользовательской форме, такими как кнопки, списки и т. д. Что позволяет использовать его для передачи данных между различными частями пользовательского интерфейса.
▶️ Исходные данные
Для целей данного примера рассмотрим следующие данные:
🔷 Задача: используя элемент управления TextBox отобразить на пользовательской форме сведения о студентах на основе заданного условия.
Для отображения информации потребуется:
- пользовательская форма:
Подробно, о том, как создается пользовательская форма мы обсуждали ранее:
- элемент управления TextBox:
- "кнопка" для вызова макроса:
▶️ Макрос для вызова формы
Чтобы отобразить заданную форму применим макрос:
Теперь, при клике на кнопку пользователь увидит форму с размещенным на ней TextBox:
Но на ней же нет данных!? 🤔 Да, так не задан основной код!
▶️ Инициализация и активация события
Чтобы по клике на кнопку сразу видеть результат (исходя из дальнейших задач использования формы) следует применить одно из событий Initialize или Activate.
🔘 UserForm_Initialize (применимо для настройки элементов формы перед их отображением):
- Событие Initialize происходит при инициализации (создании) объекта формы.
- Это событие возникает до отображения формы, когда она только начинает создаваться.
- Здесь вы можете инициализировать начальные значения элементов управления, переменных, установить определенные свойства формы.
🔘 UserForm_Activate (применимо для обновления данных, загрузки информации с других источников или для приветствия пользователя):
- Событие Activate происходит, когда форма уже создана и отображается на экране.
- Оно вызывается при активации (переключении на) форму, например, когда вы переключаетесь на нее после другой формы или листа.
- Здесь вы можете выполнять дополнительные действия, связанные с обновлением данных или взаимодействием с пользователем.
В данном примере, будем использовать код в модуле формы (UserForm1), поэтому разницы между Private Sub UserForm_Initialize и Private Sub UserForm_Activate практически нет (можно выбрать любое из событий).
🔔 Однако, есть небольшая разница в поведении в случае, если потребуется в дальнейшем добавить дополнительные действия при активации формы:
- если будет использован UserForm_Initialize, то код будет выполнен при каждом создании (инициализации) формы.
- если будет использован UserForm_Activate, код будет выполнен только тогда, когда форма фактически будет активирована, то есть при каждом переключении на нее.
➡️ Вывод:
- если у вас нет планов добавлять дополнительные действия при активации формы, можно продолжать использовать любое из этих событий;
- если же в будущем потребуется какое-либо дополнительное обновление или взаимодействие при активации формы, UserForm_Activate может оказаться более удобным.
Итак, для данного примера в модуле формы разместим код:
📝 Как работает процедура:
- Определяем последнюю заполненную строку в столбце D.
- Проходим по каждой строке от 1 до последней найденной строки.
- Если значение в столбце D равно "не сдано", добавляем значение из столбца В в текстовую переменную textToFill.
- Устанавливаем многострочный режим для TextBox1.
- Заполняем TextBox1 значениями из столбца В, разделенными символами новой строки.
Теперь, при активации данной формы, код автоматически выполняется и автоматически заполнит текстовое поле (TextBox1) данными из столбца В таблицы, при условии, что соответствующее значение в столбце D равно "не сдано":
Чтобы решение было более универсальным вынесем критерий выбора в ячейку (например, в ячейку G1):
и определим данную ячейку как именованный диапазон:
Изменив строку кода:
получим возможность более гибко управлять отображением информации:
Вы также можете вынести критерий выбора непосредственно на пользовательскую форму, например, используя элемент управления ComboBox. Но эта тема уже следующего обзора 😊.
📍 Рекомендуемые статьи 🔽