Программирование vba пользовательская форма - Новости с мира ПК
Vvmebel.com

Новости с мира ПК
4 просмотров
Рейтинг статьи
1 звезда2 звезды3 звезды4 звезды5 звезд
Загрузка...

Программирование vba пользовательская форма

Пользовательские формы (UserForm) в VBA

Свойства и методы объекта UserForm

Практически во всех приложениях Office используются пользовательские диалоговые окна. Диалоговые окна в VBA называются формами (объект UserForms). Каждому объекту UserForm присущи определенные свойства, методы и события, которые он наследует от класса объектов UserForms. Диалоговые окна (формы) и элементы управления составляют основу современного визуального интерфейса. Все элементы управления и технология работы с ними в основном стандартизованы и похожи для разных платформ и программных сред. Эти объекты помещены в специальную библиотеку MSForms.

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

§ Все загруженные диалоговые окна представляют коллекцию UserForms со стандартными методами и свойствами. Элемент коллекции – объект класса UserForm – задает отдельное окно.

§ Для каждого типа элементов управления в библиотеке msforms имеется класс объектов, имя которого совпадает с именем элемента управления (его типа). Например, есть классы SpinButton и TextBox.

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

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

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

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

§ запустить редактор VBA;

§ выделить правой кнопкой мыши объект Project, выполнить команду Insert + UserForm, после чего появляются новая форма и панель элементов Toolbox.

Форма как объект имеет некоторые встроенные свойства, и их можно устанавливать или программным образом, или в Properties Window (окне свойств) редактора VBA (таблица. Наиболее часто используемые свойства объектов UserForm).

Наиболее часто используемые свойства объектов UserForm

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.
  • Класс UserForm — создание формы vba

    Довольно часто при создании макросов может понадобиться придать им некой “динамичности”. Как и рядовые приложения, редактор VBA предоставляет объект UserForm, который отвечает за создание формы.

    По своей природе, объект vba UserForm представляет из себя пустое диалоговое окно, на поверхность которого можно добавить различные элементы управления (кнопки, списки и так далее). В отличии от тех объектов, с которыми мы работали в сценариях сервера Windows Script Host, объекты VBA помимо свойств и методом, обладают еще и событиями, кроме этого, объекты класса UserForm vba содержат в себе модуль класса, который может хранить собственные методы и свойства, или код для обработки событий.

    Что бы добавить новую форму к vba проекту, воспользуйтесь меню Insert , пункт UserForm . Обратите внимание: в окне Проектов есть папка Forms, в которой хранятся все формы, добавленные в проект, имя для формы назначается автоматически, например, UserForm1, UserForm2,…,UserFormN. Если вы случайно закроете окно формы, то его можно вновь запустить, выбрав нужную форму в окне Проектов. Можете также прочитать предыдущую стать «Знакомство с редактором VBA»

    Некоторые свойства класса UserForm vba языка

    Name – данное свойство содержит имя формы, или, точнее сказать, имя объекта. Нужно понимать, что данное значение доступно только в теле программы и никак не влияет на конечный результат.

    BackColor – содержит цвет фона.

    BorderColor – цвет рамки

    BorderStyle – стиль рамки, принимает только два возможных значения.

    Caption – свойство определяет заголовок формы, фактически, это то т же заголовок окна программы. По умолчанию, данное свойство содержит то же значение, что и свойство Name.

    Enabled – принимает логическое True или False, и определяет, доступна ли форма. Если значение свойства ровно False, то ни один из элементов управления не доступен.

    ShowModal – как и предыдущее свойство, ShowModal может принимать логические значения. True – по умолчанию, “модальный” режим, пока не будет закрыта текущая форма, другая форма или возврат в документ будут недоступны.

    Font – определяет шрифт.

    ForeColor – определяет цвет переднего плана формы, например, цвет текста.

    Некоторые методы класса UserForm vba языка

    Hide – данный метод убирает из видимости форму, делая ее скрытой. Все ее параметры и элементы управления остаются неизменными.

    Repaint – позволяет перерисовать отображаемую форму.

    Show – метод противоположен методу Hide, он делает форму видимой, если она еще не загружена в память, то происходит ее загрузка.

    И так, что бы не томить душу, давайте создадим простую форму, назовем ее “Первая программа” (свойство Caption), у меня имя формы UserForm1. Хорошо, теперь нам нужно написать макрос, при запуске которого будет выводиться форма. Для этого добавляем в проект новый модуль и в окне кода пишем следующее:

    Тут Module1 – имя процедуры, оно совпадает с именем модуля, оно хранится в свойстве Name. Sub … End Sub – это блок процедуры. UserForm1.Show – тут мы вызываем метод Show объекта UserForm1 для отображения формы, помните, UserForm1 – имя моей формы, его тоже можно изменить.

    Все, теперь если запустить текущий макрос, то пользователю просто выведется пустая форма. Можете поэкспериментировать с ее свойствами.

    Некоторые события класса UserForm vba языка

    Если новичок и может справиться со свойствами и методами, то события ему могут показаться чем-то из области пятого пространства. Давайте рассмотрим основные события формы, а потом напишем небольшой пример:

    Activate – событие возникает каждый раз, когда окно формы становится активным.

    Click – происходит клик мышью по поверхности, не занятой элементами управления.

    DblClick – аналог предыдущему событию, только тут происходит двойной клик по форме.

    Deactivate – событие возникает каждый раз, как окно формы переходит в неактивное состояние.

    Initialize – возникает как только происходит загрузка формы в память с помощью метода Show или оператора Load.

    Resize – происходит изменение размеров формы

    Terminate – событие происходит каждый раз, как только форма выгружается из памяти.

    Помним, что для вызова метода или события, сперва идет имя объекта, а потом, после точки, имя метода или свойства. С событиями все по-другому: нам нужно создать процедуру и присвоить ей имя в стиле “Объект_Событие”, то есть, сначала мы пишем имя объекта (например, UserForm1), потом идет символ подчеркивания и имя события.

    Ладно, откройте редактор формы и дважды щелкнете по полю формы, вас сразу перенаправит в редактор кода, где содержатся следующие строки:

    Видим, что данная процедура рассчитана для события Click, давайте в ней пропишем:

    Формы в VBA – это тоже объекты

    Формы в VBA – это тоже объекты

    Формой называют любое созданное в VBA пользовательское окно. Если в вашей программе предусмотрен ее собственный пользовательский интерфейс, формами будут как главное окно программы, так и все другие диалоговые окна, отображаемые вашей программой (рис. 12.3).

    Главное, здесь нужно понять, что формы VBA сами являются объектами, т.е. представляют собой сущности, содержащие как информацию (задающую, например, внешний вид формы на экране), так и набор средств для обработки этой информации. Официально формы в VBA описываются в терминах объекта User Form.

    Рис. 12.3. Примеры форм VBA

    Как и любые другие уважающие себя объекты в VBA, формы прекрасно вписываются в рамки парадигмы объектной модели. Каждый объект UserForm принадлежит одновременно двум коллекциям объектов — VBA-проекту, в котором хранится форма, и коллекции

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

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

    Для каждого типа элементов управления в VBA предлагается объект соответствующего типа.

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

    Использование объектов в программе

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

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

    Например, MyShape.LineStyle идентифицирует свойство LineStyle объекта с именем MyShape в Visio. Точно так же MyWorksheet. Calculate идентифицирует метод Calculate объекта рабочего листа с именем MyWorksheet в Excel.

    Правда, здесь вы можете задать себе вопрос: «Но как же мне узнать имя объекта, которое необходимо поместить в начале?» Блестящий вопрос! Вот только ответ на этот вопрос требует достаточно пространных пояснений, которые я отложу до раздела ‘Идентификация объекта для использования», сосредоточившись сначала на обсуждении свойств, методов и событий. А пока что примите на веру, что объект можно вызвать по его имени.

    Как вам стало очевидным из раздела «Что такое объектная модель», каждое VBA приложение имеет свою неповторимую объектную модель (иерархию объектов), а каждый из его объектов имеет свой собственный набор свойств, методов и событий. Чтобы заставить эти объекты работать в программе, вам необходимо хорошо разобраться в деталях объектной модели соответствующего приложения.

    Во многих приложениях справка о VBA содержит специальный раздел, в котором вы найдете графическое представление объектной модели этого приложения (рис. 12.4). Если диаграмма объектной модели не появилась перед вами при первом же вызове справки, перейдите в окне справки на вкладку Содержание, где она будет представлена под рубрикой типа Microsoft Excel Objects.

    Используя диаграмму объектной модели в качестве гида, вы сможете открыть информацию о конкретном объекте, дважды щелкнув на его имени в диафамме. Иначе получить нужную информацию можно, отыскав в указателе справки соответствующий раздел и открыв его. Как правило, в любом разделе, посвященном объекту, имеются ссылки на другие разделы, содержащие дополнительную информацию о свойствах, методах и событиях соответствующего объекта. (Заметьте, здесь идет речь о справке о VBA для соответствующего приложения, а не об общей справке о приложении или VBA. О работе со справочной системой VBA см. главу 4.)

    Рис. 12.4. Объектная модель Excel

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

    Полное описание обозревателя объектов см. в главе 6.

    Практическая работа в редакторе VBA «Создание пользовательской формы «Расчет скорости»»

    Тип урока: урок закрепления новых знаний и выработки умений.

    Цель урока: закрепление пройденного материала по созданию пользовательской формы; вставки надписей, полей, кнопок и картинки в пользовательскую форму; программирование кнопок пользовательской формы; вызов пользовательской формы на рабочий стол редактора Excel; проверка работы пользовательской формы.

    Оборудование: компьютер, проектор, экран.

    Продолжительность работы: 40 минут.

    Домашнее задание: 5 минут.

    1. Открыть или создать файл для работы;
    2. Перейти в редактор Visual Basic (Сервис >Макрос >редактор Visual Basic);
    3. Создать пользовательскую форму (Insert>UserForm);

      На панели элементов выбрать пиктограмму “Label” — “Надпись”;

  • В пользовательской форме нарисовать окно для надписи.
  • В окне сделать надпись “Расстояние”, для этого:
    — щелкнуть правой кнопкой по окну “Label1” и выбрать команду “Properties”;

    — в появившемся окне свойств выбрать:

    — свойство “Caption”, в котором вместо слова “Label1” написать слово “Расстояние”;
    свойство “TextAlign”, в котором поставить цифру 2 – выравнивание по центру.

  • Аналогичным образом сделать еще две надписи: “Время” и “Скорость”.
  • Подключить пиктограмму “TextBox”“Поле” и под каждой надписью нарисовать окно.

  • Подключить пиктограмму “CommandButton”“Кнопка”.
  • Нарисовать в пользовательской форме 2 кнопки и подписать их “Выход из формы” и “Расчет Скорости” с помощью свойств “Caption” и “TextAlign”.
  • Свернуть окно редактора Visual Basic.
  • Войти в редактор Paint и нарисовать машинку в верхнем левом углу рабочего листа.
  • Сохранить данный рисунок на Рабочем столе под именем “Машина”.
  • Развернуть Пользовательскую форму.
  • Нажать пиктограмму “Image”.

  • Нарисовать окно в пользовательской форме.
  • В появившемся окне “Properties” выбрать:
    — свойство “Picture” и щелкните по слову “None”;
    — в появившемся окне “LoadPicture” войти на Рабочий стол, найти

    свой файл “Машина” и выполнить команду “Открыть”;
    — в свойстве “PictureAlignment” поставить “0”, должна появиться картинка
    Вашей машины.

  • В получившейся пользовательской форме запрограммируйте кнопку “CommandButton1” для этого:
    — два раза щелкните по кнопке “Выход из формы”;
    — написать оператор UserForm1.Hide (закрыть пользовательскую форму №1);
    1. Запрограммировать кнопку “CommandButton2”“Расчет скорости” для этого:

    — два раза щелкнуть по кнопке;
    — написать программу:
    S = Val(TextBox1) — считываем значение из окошка TextBox1

    T = Val(TextBox2) — считываем значение из окошка TextBox2

    V = S / T — производим вычисление скорости

    TextBox3 = Str(V) — полученное значение записываем в окошко TextBox3

  • Перейти на рабочий лист редактора Excel.
  • Подключить панель элементов (Вид > Панели инструментов > Панель элементов).
  • Начертить кнопку и подписать ее “Вызов формы”. Запрограммировать данную кнопку, для этого:
    ? два раза щелкнуть по кнопке левой кнопкой мыши;
    ? написать фразу – UserForm1.Show (Показать пользовательскую форму №1)

    На панели элементов отключить Режим конструктора.

  • Вызвать получившуюся форму и проверить работу всех кнопок.
  • Создать пользовательскую форму по заданному образцу и проверить ее работу.

    голоса
    Рейтинг статьи
    Ссылка на основную публикацию
    Adblock
    detector