Гость |

Построение экранных форм (Forms)
Введение
Чтобы дать указания макросу для выполнения действий со сложными условиями, необходимо создание экранных форм, так как обычных диалогов уже не хватает. Точнее, придется выводить множество запросов, что явно не отвечает требованиям эргономики интерфейса. Они ничем не отличаются от любых диалогов во всех программах, кроме возможности добавления управляющих элементов.
Но! Вспомните, сколько раз вам приходилось выискивать нужный пункт в диалоге или пытаться осознать, о чем вас спрашивают? Учтите это при разработке собственных форм. Правила создания диалогов крайне просты: всё запрошено, но сделано это кратко и понятными словами.
Использование форм достаточно сложно и вошло в основной курс изучения только в 2021 году. Более подробно, чем изложено здесь, это будет обсуждаться только с профильными группами или в элективном курсе.
Создание формы
Форма должна быть сохранена в каком-либо проекте (project): шаблоне или документе.
Перейдем в окно VBE нажатием горячей клавиши Alt+F11. Сразу ещё раз акцентирую ваше внимание на том, что редактор написан на английском языке, хотя используется русская версия Word!
Щелчком правой клавишей мыши в любом месте перечня объектов проекта (выберем текущий документ) в окне Project Explorer (в левом верхнем углу) вызовем контекстное меню, через которое и происходит добавление формы.
Будет создана категория Forms, в которой разместится новая форма, получающая название по умолчанию UserForm1. Появится инструментальная панель Toolbox, содержащая элементы управления для вставки в форму.
Сама форма активизируется, то есть появится рамка с точками выделения, за которые (белые) можно изменять размеры, что мы и сделаем для удобства вывода на сайт. Впоследствии, к активации окна формы приведет щелчок мышью на свободном месте или заголовке.
Щелкнем на ней правой кнопкой мыши и выберем пункт контекстного меню Properties (Свойства), в результате чего откроется окно под списком проектов. (Если оно не было открыто ранее.)
Всего свойств 34, но обсуждаться они пока будут только по необходимости.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Private Sub CommandButton1_Click() End Sub
Разберем подробно каждый элемент, так как именно на них основано всё программирование форм.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Теперь создадим аналогичную команду для кнопки Cancel, пойдя наиболее сложным путем, чтобы проиллюстрировать, как создаются программы для методов, не формируемые автоматически.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Сотрем лишние пустые программы, которые скорее всего создались во время ваших экспериментов и отредактируем нужную нам. Чтобы понять, как, необходимо определить, какой из двух возможных способов обработки формы вы будете использовать.
Способ 1. Все необходимые действия производятся в процедурах нажатия кнопок, после чего форма скрывается (Hide) или уничтожается (Unload). Вариант является очевидным и стандартным, но не всегда приемлемым.
Способ 2. Форма скрывается (Hide), после чего происходит обработка из вызвавшей форму программы. Вариант требует дополнительных усилий, но именно он понадобится для подавляющего большинства случаев.
Разберем их реализацию по порядку.
Выполнения действий из формы
Наверно, этот вопрос является ключевым для написания начальных программ с задействованием формы.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Во-вторых, вместо MsgBox нужно ввести код, нужный для данного случая.
В-третьих, If...Else хватило только потому, что выбираем один вариант из двух. Иначе потребуется более сложная конструкция.
Выполнения действий в вызвавшей процедуре
Такой способ будет наиболее эффективен, если форму придется открывать много раз.
Первый вопрос, который возникает, касается того, какая же кнопка была нажата для закрытия формы: подтверждение или отказ.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
В данном случае использован объектный метод
ИмяФормы.Hide
Заметьте, команда скрывает форму, а не удаляет ее. В результате можно программно обратиться к отдельным элементам и изучить, что они содержат. То есть проанализировать выбор и/или ввод пользователя.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Все приведенные комментарии для предыдущего способа, действительны и здесь.
Побочный эффект будет заключаться в том, что все изменения, произведенные в форме, сохранятся при ее повторном показе. С этим придется либо бороться, либо, наоборот, удастся воспользоваться.
Для более сложных диалогов можно создавать кнопки, изменяющие настройки других элементов. В качестве классического примера можно привести кнопку, восстанавливающую значения по умолчанию.
Примеры форм
Диалог обратной связи интеллектуальной системы выделения авторов в списке литературы. Производит анализ текста и расширение/уменьшение выделения справа и слева в зависимости от нажатой кнопки диалога.
Примитивное информирование пользователя о шаблоне, построенное на базе MsgBox, где сообщение принудительно разбито на строки.
Работа со списком научных журналов (3792 штуки). Доступно добавление, удаление, редактирование. Накапливается информация о вариантах написания и правильном сокращенном написании, включая его версии в разные периоды.
Элемент системы проверки списков литературы, позволяющий выявлять некоторые часто встречающиеся проблемы библиографических списков с безошибочной эффективностью на 5–10 порядков выше, чем у профессионального редактора.
Объекты управления и методы
Ниже приведены основные объекты, связанные с формами, и перечислены их методы (не свойства!). Найти даже эту информацию достаточно сложно. Так что, не обессудьте, обсуждаться они пока не будут.
Восклицательным знаком обозначены методы, создаваемые автоматически при двойном щелчке на элементе управления.
Методы UserForm
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы Label
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы SpinButton
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы CommandButton
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Методы TextBox
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Проверка введенных данных
Для начала хочется отметить, что многие программисты либо совсем игнорируют подобное действие, либо доводят его до абсурда, вводя пользователей в бешенство. Учтите эти две крайности и постарайтесь их избежать. Лучшим помощником в этом будет многократное испытание на собственной шкуре.
Это действие разумнее всего производить в самой форме, не загромождая программу.
Прежде чем погружаться в реализацию, надо разобраться, какие варианты проверки и/или ограничений можно использовать.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
Для того, чтобы помочь пользователю, можно заранее запрограммировать наиболее часто используемые варианты, оставив и для него возможность ввести нечто отличное. Для этих целей можно использовать комбинированный список или радиокнопки, дополненные полем ввода.
Обращение к форме из программы
Это уже обсуждено в примерах, но, все же, уточним еще раз.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
В пределах модуля программного кода самой формы, такой префикс не требуется.
Удаление формы из памяти
Производится командой (инструкцией):
Unload Test1
После выгрузки объекта, он полностью удаляется из памяти, освобождая ее. Но обращение к нему также становится невозможным.
Элементы управления формы
Обсудим все элементы, которые вынесены на панель Toolbox и могут быть использованы в форме на примере Office 2019. (Часть задействованных выше скриншотов относились к Word 2003, работа элементов которого комментироваться не будет, хотя отличия и есть.)
Как вы можете увидеть, по умолчанию активирован инструмент выделения (Select Objects, стрелка ).
Для получения названия элемента нужно навести на него курсор мыши.
Если панель была отключена, то за её вывод отвечает пункт меню View⇒Toolbox.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Технология ввода элементов
Сразу отмечу, что технология использования инструментов из Toolbox довольно нестандартна и несколько раз изменялась в ходе развития. К счастью, во многом в лучшую сторону.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
Общие замечания, свойства и настройки
N.B.! Общие свойства описаны здесь, а частные — в соответствующих элементах. Предпринята попытка не повторять одно и то же 10 раз, а приводить при первом упоминании. При необходимости можно воспользоваться поиском по имени на данной странице.
Говоря о подготовке форм, неизбежно приходится обсуждать множество противоречий, крайне затрудняющих принятие конкретных решений. Дизайн, эстетика, функциональность, привычки, логика, самодурство наконец...
Попробуем здесь разобрать основные свойства, понятия, смыслы. Окончательные решения принимать вам, но лучше, если они будут опираться на некоторую базовую позицию.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Label (надпись)
Относится к стандартно пассивным элементам, единственное назначение которых — вывод пояснений пользователю перед активным элементом.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
TextBox (поле ввода текста)
Элемент, необходимый для ручного ввода значения пользователем.
В упрощенном понимании, заменяет InputBox.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
ComboBox
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
CommandButton
Командная кнопка () — самый стандартный активный элемент, нажатие которого в норме производит запуск программы.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
TabStrip
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
MultiPage
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
ScrollBar
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
SpinButton
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
Image (картинка)
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
Порядок обхода элементов формы (Tab Order)
Создание формы однозначно относится к творческому виду работ. Отсюда вытекает определенный неизбежный «хаос» в процессе вставки и размещения управляющих элементов. Оставление их в таком виде, как есть, безусловно следует считать недопустимой неряшливостью.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
....
Возможные ошибки при задействовании форм
Многие из них некритичны или даже нужны, но как результат осознанного выбора.
Доступ к этим материалам предоставляется только зарегистрированным пользователям!
Вывод: нужно всё время думать о соблюдении баланса и принимать обоснованные и спланированные решения. Интерфейс относится к наиболее ответственным элементам программы, определяющим отношение к ней.
....
См. также Диалоги.