Как создать форму в vba excel 10

5.2 Создание форм и самые важные свойства и методы форм

Создание форм VBA, свойства форм, методы Show(), Hide(), команда Unload, событие Initialize()

Создать форму очень просто: для этого достаточно в редакторе Visual Basic щелкнуть правой кнопкой мыши по проекту (то есть документу) в окне Project Explorer и в контекстном меню выбрать Insert -> User Form. Откроется окно дизайнера форм (Form designer), в котором будет представлено пустое серое окно формы (по умолчанию она будет называться UserForm1) и рядом — Toolbox, панель с набором элементов управления (см. рис. 5.1).

Рис. 5.1 Все готово для работы с формой

Если у вас включен показ окна свойств (он включается по клавише ), то в этом окне будут представлены свойства формы. Переход на код для этой формы (по умолчанию открывается событие Click) — по клавише , возврат обратно в окно дизайнера форм — по + .

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

Некоторые самые важные свойства форм (кроме ShowModal, все они применимы и для других элементов управления):

  • свойство (Name) — определяет имя формы. Пользователь, скорее всего, его никогда не узнает. Имя формы используется только программистом в программном коде для этой формы (и в окнах редактора Visual Basic). После создания формы ее имя, предлагаемое по умолчанию (UserForm) рекомендуется заменить на что-либо более значимое, чтобы было проще ориентироваться в программе (это относится ко всем элементам управления);
  • свойство Caption — определяет заголовок формы (по умолчанию совпадает с именем формы). Рекомендуется ввести строку, которая будет напоминать пользователю о назначении формы (например, "Выбор типа отчета");
  • свойство Enabled — если установлено в False, пользователь работать с формой не сможет. Используется для временного отключения формы, например, пока пользователь не обеспечит какие-то условия для ее работы;
  • свойство ShowModal — если установлено в True (по умолчанию), пользователь не может перейти к другим формам или вернуться в документ, пока не закроет эту форму. В версиях до VBA6 поддерживались только модальные формы.

Большая часть основных свойств относится к внешнему виду, размерам и местонахождению окон.

Самые важные методы форм:

В процессе редактирования формы (из окна редактора Visual Basic) форму можно запускать по нажатию клавиши . После того, как форма будет готова, вы должны обеспечить запуск этой формы в документе. Для запуска формы нужно воспользоваться методом Show():

Если форма уже была загружена в память, она просто станет видимой, если еще нет — то будет автоматически загружена (произойдет событие Load).

Саму эту команду, можно вызвать, например:

  • из обычного макроса, привязанного к кнопке или клавиатурной комбинации;
  • из автозапускаемого макроса (макроса с названием AutoExec для Word);
  • из кода для элемента управления, расположенного в самом документе (например, CommandButton) или на другой форме — для перехода между формами;
  • поместить ее в обработчик события Open для документа Word или книги Excel, чтобы форма открывалась автоматически при открытии документа.

После того, как пользователь введет/выберет нужные данные на форме и нажмет на требуемую кнопку, форму необходимо убрать. Можно для этой цели воспользоваться двумя способами:

спрятать форму (использовать метод Hide()), например:

форма будет убрана с экрана, но останется в памяти. Потом при помощи метода Show() можно будет опять ее вызвать в том же состоянии, в каком она была на момент "прятанья", а, можно, например, пока она спрятана, программно изменять ее и расположенные на ней элементы управления. Окончательно форма удалится из памяти при закрытии документа;

если форма больше точно не потребуется, можно ее удалить из памяти при помощи команды Unload:

Остальные методы относятся либо к обмену данными через буфер обмена (Copy(), Cut(), Paste()), либо к служебным возможностям формы ( PrintForm(), Repaint(), Scroll()).

Важнейшая концепция VBA — события. Событие (event) — это что-то, что происходит с программой и может быть ей распознано. Например, к событиям относятся щелчки мышью, нажатия на клавиши, открытие и закрытие форм, перемещение формы по экрану и т.п. VBA построен таким образом, чтобы создавать на нем программы, управляемые событиями (event-driven). Такие программы противопоставляются устаревшему процедурному программированию.

Самые важные события форм:

  • Initialize — происходит при подготовке формы к открытию (появлению перед пользователем). Обычно в обработчик для этого события помещается код, связанный с открытием соединений базы данных, настройкой элементов управления на форме, присвоение им значений по умолчанию и т.п.
  • Click (это событие выбирается по умолчанию) и DblClick — реакция на одиночный и двойной щелчок мыши соответственно. Для формы это событие используется не так часто. Обычно обработчик щелчков используется для кнопок (элементов управления CommandButton). По причине простоты мы использовали это событие для демонстрации нашего кода.
  • Error — это событие используется при возникновении ошибки в форме, используется как возможность предоставить пользователю исправить сделанную им ошибку. Подробнее — в специальном модуле, посвященном ошибкам и отладке.
  • Terminate — событие используется при нормальном завершении работы формы и выгрузке ее из памяти (например, по команде Unload). Обычно используется для разрыва открытых соединений с базой данных, освобождения ресурсов, протоколирования и т.п. Если работа формы завершается аварийно (например, запустившее форму приложение выдало команду End), то это событие не возникает.
  • остальные события связаны либо с изменением размера окон, либо с нажатиями клавиш, либо с активизацией (получением фокуса)/деактивизацией (потерей фокуса).

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

Некоторые моменты, связанные с созданием и редактированием форм:

  • Формы, создаваемые в Microsoft Access, не являются стандартными, как формы остальных приложений Office, и набор свойств и методов у них несколько отличается. Тем не менее по функциональности они практически одинаковы.
  • Иногда для обсуждений формы удобно распечатать. Для этого предусмотрено специальное диалоговое окно, которое можно вызвать по нажатию кнопки +

(при выбранной форме в дизайнере).

  • Если все нужные вам элементы управления трудно уместить на одной форме (даже большого размера), в вашем распоряжении два варианта: воспользоваться двумя формами (переходя между ними при помощи методов Show() и Hide(), подвязанных к элементам управления) или воспользоваться несколькими вкладками для формы. Для этой цели в вашем распоряжении — специальный элемент управления Multipage.
  • Построение экранных форм (Forms)

    Содержание

    Введение

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

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

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

    Создание формы

    Форма должна быть сохранена в каком-либо проекте (project): шаблоне или документе.

    Перейдем в окно VBE нажатием горячей клавиши Alt+F11 . Сразу ещё раз акцентирую ваше внимание на том, что редактор написан на английском языке, хотя используется русская версия Word!

    Щелчком правой клавишей мыши в любом месте перечня объектов проекта (выберем текущий документ) в окне Project Explorer (в левом верхнем углу) вызовем контекстное меню, через которое и происходит добавление формы.

    Будет создана категория Forms, в которой разместится новая форма, получающая название по умолчанию UserForm1. Появится инструментальная панель Toolbox, содержащая элементы управления для вставки в форму.

    Сама форма активизируется, то есть появится рамка с точками выделения, за которые (белые) можно изменять размеры, что мы и сделаем для удобства вывода на сайт. Впоследствии к активации окна формы приведет щелчок мышью на свободном месте или заголовке.

    Щелкнем на ней правой кнопкой мыши и выберем пункт контекстного меню Properties (Свойства), в результате чего откроется окно под списком проектов. (Если оно не было открыто ранее.)

    Всего свойств 34, но обсуждаться они пока будут только по необходимости.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Разберем подробно каждый элемент, так как именно на них основано всё программирование форм.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

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

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

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

    Способ 1. Все необходимые действия производятся в процедурах нажатия кнопок, после чего форма скрывается (Hide) или уничтожается (Unload). Вариант является очевидным и стандартным, но не всегда приемлемым.

    Способ 2. Форма скрывается (Hide), после чего происходит обработка из вызвавшей форму программы. Вариант требует дополнительных усилий, но именно он понадобится для подавляющего большинства случаев.

    Разберем их реализацию по порядку.

    Выполнения действий из формы

    Наверно, этот вопрос является ключевым для написания начальных программ с задействованием формы.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Во-вторых, вместо MsgBox нужно ввести код, нужный для данного случая.

    В-третьих, If. Else хватило только потому, что выбираем один вариант из двух. Иначе потребуется более сложная конструкция.

    Выполнения действий в вызвавшей процедуре

    Такой способ будет наиболее эффективен, если форму придется открывать много раз

    Первый вопрос, который возникает, касается того, какая же кнопка была нажата для закрытия формы: подтверждение или отказ.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    В данном случае использован объектный метод

    Заметьте, команда скрывает форму, а не удаляет ее. В результате можно программно обратиться к отдельным элементам и изучить, что они содержат. То есть проанализировать выбор и/или ввод пользователя.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Все приведенные комментарии для предыдущего способа, действительны и здесь.

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

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

    Примеры форм

    Диалог обратной связи интеллектуальной системы выделения авторов в списке литературы. Производит анализ текста и расширение/уменьшение выделения справа и слева в зависимости от нажатой кнопки диалога.

    Примитивное информирование пользователя о шаблоне, построенное на базе MsgBox, где сообщение принудительно разбито на строки.

    Работа со списком научных журналов (3792 штуки). Доступно добавление, удаление, редактирование. Накапливается информация о вариантах написания и правильном сокращенном написании, включая его версии в разные периоды.

    Элемент системы проверки списков литературы, позволяющий выявлять некоторые часто встречающиеся проблемы библиографических списков с безошибочной эффективностью на 5–10 порядков выше, чем у профессионального редактора.

    Объекты управления и методы

    Ниже приведены основные объекты, связанные с формами, и перечислены их методы (не свойства!). Найти даже эту информацию достаточно сложно. Так что, не обессудьте, обсуждаться они пока не будут.

    Восклицательным знаком обозначены методы, создаваемые автоматически при двойном щелчке на элементе управления.

    Методы UserForm

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Методы Label

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Методы SpinButton

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Методы CommandButton

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Методы TextBox

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Проверка введенных данных

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

    Это действие разумнее всего производить в самой форме, не загромождая программу.

    Прежде чем погружаться в реализацию, надо разобраться, какие варианты проверки и/или ограничений можно использовать.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

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

    Обращение к форме из программы

    Это уже обсуждено в примерах, но, все же, уточним еще раз.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    В пределах модуля программного кода самой формы, такой префикс не требуется.

    Удаление формы из памяти

    Производится командой (инструкцией):

    После выгрузки объекта, он полностью удаляется из памяти, освобождая ее. Но обращение к нему также становится невозможным.

    Элементы управления формы

    Обсудим все элементы, которые вынесены на панель Toolbox и могут быть использованы в форме на примере Office 2019. (Задействованные выше скриншоты относились к Word 2003, работа элементов которого комментироваться не будет, хотя отличия и есть.)

    Для получения названия элемента нужно навести на него курсор мыши.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Общие замечания, свойства и настройки

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Label (надпись)

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    TextBox (поле ввода текста)

    Элемент, необходимый для ручного ввода значения пользователем. В упрощенном понимании, заменяет InputBox.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    CommandButton

    Командная кнопка — самый стандартный активный элемент, нажатие которого в норме производит запуск программы.

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    TabStrip

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    MultiPage

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    ScrollBar

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    SpinButton

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Image (картинка)

    Доступ к этим материалам предоставляется только зарегистри­рован­ным пользователям!

    Порядок обхода элементов формы (Tab Order)

    Создание формы однозначно относится к творческому виду работ. Отсюда вытекает определенный неизбежный «хаос» в процессе вставки и размещения управляющих элементов. Оставление их в таком виде, как есть, безусловно следует считать недопустимой неряшливостью.

    Copyright © 1993–2021 Мацкявичюс Д.А. Все права защищены.
    Никакая часть сайта не может быть воспроизведена никаким способом без письменного разрешения правообладателя и явной ссылки на данный ресурс.

    Ссылка на основную публикацию