Программирование VBA. Федеральное агентство по образованию государственное образовательное учреждение высшего профессионального образования
Скачать 2.93 Mb.
|
2.11.1. Свойства, методы и события экранных форм Форма представляет собой интерфейс пользователя. Она может со- держать меню, кнопки, окна списков, полосы прокрутки и другие элементы, существующие в программах MS Office. VBA по умолчанию предлагает форму, которая имеет имя UserForm1, со стандартной сеткой (группа рав- номерно расположенных точек). Сетка служит для удобства размещения 56 элементов пользовательского интерфейса. Шаг сетки можно изменить вы- полнив команду Сервис, Параметры (Tool, Options), закладка Общие (General). Форма UserForm1 может быть переименована, и её размеры мо- гут быть изменены при разработке приложения. При необходимости можно добавить новые формы. Каждая форма при работе программы будет ок- ном пользовательского интерфейса. Форма (UserForm) является объектом и обладает большим набором свойств, методов и событий. 2.11.1.1. Некоторые свойства форм Большая часть основных свойств относится к внешнему виду, разме- рам и местонахождению окон. Свойство Name задаёт имя формы. После создания первой формы в проекте она по умолчанию получает стандартное имя UserForm1, второй – UserForm2, и т.д., которое рекомендуется заменить на такое, чтобы оно указывало на назначение формы. Свойство Caption задаёт заголовок формы. Значение этого свой- ства также рекомендуется назначить таким, чтобы оно указывало на назначение формы, например, "Выполнение плана". Свойство Enabled используется для временного отключения формы. 2.11.1.2. Некоторые методы форм Во время редактирования формы её можно запускать нажатием кла- виши F5. После того, как форма будет готова, нужно обеспечить её запуск в документе. Для этого нужно воспользоваться методом Show: UserForm1.Show Если форма уже была загружена в память, она просто станет види- мой, если еще нет, то будет автоматически загружена (произойдет собы- тие Load). Эту команду, можно вызвать, например: из обычного макроса, назначенного кнопкой или комбинацией клавиш или запускаемого файлом автозапуска Auto_Exec; из кода для элемента управления, расположенного в самом до- кументе, например, CommandButton или на другой форме – для перехода между формами. После того, как пользователь введет или выберет нужные данные на форме и нажмет на требуемую кнопку, форму необходимо убрать. Можно для этой цели воспользоваться двумя способами: использовать метод Hide: UserForm1.Hide Форма будет убрана с экрана, но останется в памяти. Потом при помо- щи метода Show() можно будет опять ее вызвать в том же состоянии, в каком она была на момент удаления с экрана. Окончательно форма удалится из памяти при закрытии документа. 57 если форма в процессе работы приложения больше не потребу- ется, можно ее удалить из памяти при помощи команды Unload: Unload UserForm1 Остальные методы относятся либо к обмену данными через бу- фер обмена: Copy, Cut, Paste, либо к служебным возможностям фор- мы: PrintForm, Repaint, Scroll. Важнейшая концепция VBA – события. Событие (event) – это то, что происходит с программой и может быть ей распознано. Например, к событиям относятся щелчки мышью, нажатия на клавиши, открытие и закрытие форм, перемещение формы по экрану и т.п. VBA построен таким образом, чтобы создавать на нем программы, управляемые со- бытиями. 2.11.1.3. Некоторые события форм Часто используемые события форм: Initialize происходит при подготовке формы к открытию (появле- нию перед пользователем). Обычно в обработчик для этого со- бытия помещается код, связанный с открытием соединений базы данных, настройкой элементов управления на форме, присвое- ние им значений по умолчанию и т.п. Click и DblClick – реакция соответственно на одиночный и двой- ной щелчок мыши. Обычно обработчик щелчков используется для кнопок элементов управления CommandButton. Error – это событие используется при возникновении ошибки в форме и применяется пользователем для исправления сделан- ной им ошибки. Terminate – событие используется при нормальном завершении работы формы и выгрузке ее из памяти, например, по команде Unload. Остальные события связаны либо с изменением размера окон, либо с на- жатиями клавиш, либо с активизацией или деактивизацией. Главное событие формы – Initialize. Все остальные события обычно используются для расположенных на ней элементов управления. 2.11.2. Элементы управления Элементы управления используются для взаимодействия пользова- теля с приложением. Элементы управления реагируют на события, кото- рые генерирует пользователь (нажатие на кнопку, ввод значения, переме- щение ползунка и т.п.). Их можно размещать в документах непосредствен- но на рабочем листе и на пользовательских формах VBA. Элементы управления находятся на Панели элементов в виде кно- пок. Ниже приведена панель “Элементы управления” на рабочем листе 58 и панель “Toolbox” – в пользовательской форме. На рис. 16 а, б представлены элементы управления с англоязычным и русскоязычным обозначением кнопок. Рис. 16,а. Стандартная панель элементов (англоязычные обозначения) Рис. 16,б. Стандартная панель элементов (русскоязычные обозначения) Ниже рассмотрено использование элементов управления сначала в пользовательских формах, а затем – на рабочем листе. Добавление элементов управления на форму обычно производится при помощи панели элементов ToolBoox (рис. 15). Для этого необходимо 59 выбрать элемент управления в Toolbox и перетащить его на форму или выделить элемент управления в Toolbox и затем на форме выделить ту область экрана, которую будет занимать этот элемент управления. После добавления в форму элемента управления ему назначается имя, которое состоит из названия типа элемента управления и порядкового номера. На- пример, если добавить элемент управления Label в пустую форму, то этот элемент управления получит название Label1; если добавить в окно вто- рой элемент управления Label, то он получит название Label2. 2.11.2.1. Элемент управления Label (Надпись) Надпись – это просто область формы, в которой выводится какой-то текст. На рис. 17 таким текстом является “ Элемент управления Label ”. Рис. 17. Пример значения элемента управления Label на форме 2.11.2.1.1. Окно свойствформы Для просмотра и изменения свойств формы или элементов управле- ния во время проектирования используется окно свойств Properties (рис.18). Для получения справки по какому-либо свойству формы нужно выделить его в окне свойств и нажать клавишу F1. Рис. 18. Окно свойств формы Properties Открыть окно свойств можно одним из трёх способов: с помощью команды Вид, Окно свойств (View, Properties Window); с помощью пиктограммы ; с помощью клавиши F4. После выполнения одного из этих действий в окне Properties появится список свойств объекта и их значения. Чтобы изменить значение свойства, нужно найти его в левой колонке и изменить значение в правой колонке. 60 Если в области значений появились три точки, то нужно щелкнуть на них, чтобы открылось диалоговое окно. Если появилась указывающая вниз стрелка, то щелчок на ней раскрывает список возможных значений. Отобразить форму на экране можно двумя способами. 1. Из окна проектирования формы UserForm щёлкнуть клавишей F5. 2. Запустить процедуру, которая вызывает метод Show объекта UserForm. Если объект UserForm называется ПЛАН_ОТГРУЗКИ, то следующая процедура отобразит это пользовательское диалоговое окно. Sub ПЛАН_ОТОБРАЗИТЬ() ПЛАН_ОТГРУЗКИ.Show End Sub Эта процедура должна находиться в стандартном модуле VBA, а не в модуле формы! Изменим свойство Font элемента управления Label: выделим эле- мент управления Label на форме, установим для него размер шрифта равным 14 и начертание – курсив. Кроме того, выделим форму и зададим свойству Name (имя формы) значение “ПЛАН_ОТГРУЗКИ” и свойству Caption (заголовок) – значение “План отгрузки. Клавишей F5 запустим мо- дуль формы ПЛАН_ОТГРУЗКИ на выполнение. Тогда на экран будет вы- ведена форма, представленная на рис. 19. Примечания 1. Имя формы, как и имя любого объекта VBA, не может содержать символ “пробел”; вместо него рекомендуется использовать символ “подчёркивание” (_). 2. Свойство Caption может иметь любое значение, в том числе и совпадающее с именем объекта. Рис. 19. Форма План_отгрузки 2.11.2.2. Элемент управления CommandButton (Кнопка) Отображаемая пользовательская форма находится на экране до тех пор, пока она не будет скрыта или выгружена. Диалоговое окно UserForm автоматически выгружается из памяти при щелчке на кнопке в строке заголовка окна формы. Обычно в пользовательскую форму вставляют элемент управления CommandButton, который запускает процедуру закры- тия формы. Эта процедура или выгружает пользовательскую форму с по- мощью оператора Unload, или скрывает пользовательскую форму с экрана с помощью метода Hide объекта UserForm. При вызове метода Hide диа- логовое окно удаляется с экрана, но форма остаётся в памяти. 61 Щелчок по элементу управления вызывает событие, которое можно обработать процедурой формы. Эта процедура находится в модуле фор- мы и имеет имя, состоящее из имени элемента управления с порядковым номером элемента в форме, и слова Click, разделённых символом “под- чёркивание”, например, CommandButton1_Click. При этом первый вставляемый в форму элемент данного типа имеет но- мер 1, второй – 2 и т.д. Имя элемента управления, определяемое пара- метром (Name), можно менять на смысловое в таблице свойств Propеrties, например, на Ок или Выйти. В этом случае процедура обработки события будет иметь имя соответственно Ок_Click и Выйти_Click. Для создания процедуры обработки события, возникающего при щелчке по элементу управления формой, нужно дважды щёлкнуть по это- му элементу в окне редактора форм. Тогда произойдёт переход в модуль формы, в котором отобразится “заготовка” процедуры обработки события UserForm, например, Private Sub CommandButton1_Click() End Sub или Private Sub Ok_Click() End Sub если имя формы было заменено в окне Propеrties на Ok. В эту процедуру нужно вставить операторы(инструкции) обработки события, например, Private Sub Ok_Click() Range(“A1”).Value = ShouКвартал.КВАРТАЛЫ.Value R = ShouКвартал.КВАРТАЛЫ.Value End Sub Private Sub Ok_Click() Unload Me End Sub При щелчке по кнопке Ok в первой процедуре ячейка A1 активного листа получит значение элемента управления КВАРТАЛЫ формы ShouКвартал, а вторая процедура вызовет выгрузку активной (текущей) формы. Ключевое слово Me возвращает (указывает) имя активного окна. Скрыть или выгрузить форму можно также при помощи стандартной процедуры, которую можно вызвать из любой другой процедуры, в том числе из процедуры формы. Приведённая ниже процедура ПЛАН_СКРЫТЬ скрывает форму ПЛАН_ОТГРУЗКИ, а процедура ПЛАН_УДАЛИТЬ удаляет форму ПЛАН_ОТГРУЗКИ из памяти. Sub ПЛАН_СКРЫТЬ() ПЛАН_ОТГРУЗКИ.Hide End Sub 62 Sub ПЛАН_ УДАЛИТЬ () Unload ПЛАН_ОТГРУЗКИ End Sub Вместо операторов ПЛАН_ОТГРУЗКИ.Hide и Unload ПЛАН_ОТГРУЗКИ можно использовать операторы Me.Hide и Unload Me. 2.11.2.3. Элемент управления TextBox (Текстовое поле) Текстовое поле используется: для приема каких-либо текстовых данных, вводимых пользователем; для вывода пользователю текстовых данных с возможностью их редактирования; для вывода текстовых данных с возможностью копирования и печати, но без возможности изменения. Наиболее часто используемые свойства этого элемента управле- ния: Value (или Text, эти два свойства для текстового поля идентичны) – то текстовое значение, которое содержится в этом поле. Используется для занесения исходного значения и для приема значения, введенного пользователем, в строковую переменную. AutoSize – возможность для текстового поля автоматически менять свой размер, чтобы вместить весь текст. ControlSource – ссылка на источник текстовых данных для поля. Может ссылаться, например, на ячейку в Excel, на поле в Recordset и т.п. При изменении пользователем данных в текстовом поле автоматически изменится значение на источнике, определенном в ControlSource. ControlTipText – текст всплывающей подсказки, которая появляется, когда пользователь наводит указатель мыши на элемент управления. Рекомендуется к заполнению для всех элементов управления (для самой формы не предусмотрена). Enabled – если переставить в False, то текст в поле станет серым и с содержимым поля ничего сделать будет нельзя (ни ввести текст, ни выделить, ни удалить). Обычно это свойство используется (для всех элементов управления), чтобы показать пользователю, что этот элемент управления отключен до выполнения каких-либо условий. Locked – поле будет выглядеть как обычно, пользователь сможет выделять и копировать данные из него, но не изменять их. Обычно используется для показа неизменяемых данных типа лицензионных соглашений, сгенерированных значений и т.п. MaxLength – максимальная длина значения, которое можно ввести в поле. Иногда можно использовать свойство AutoTab – при достижении определенного количества символов управление автоматически передается другому элементу управления. 63 MultiLine – можно ли использовать в текстовом поле несколько строк или необходимо обойтись одной. Если вам нужно текстовое поле для приема одного короткого значения, подумайте, нельзя ли вместо него обойтись функцией InputBox. PasswordChar – указать, за каким символом будут «прятаться» вводимые пользователем значения. Используется, конечно, при вводе пароля. ScrollBars – будут ли показаны горизонтальная и вертикальная полосы прокрутки (в любом сочетании). Если текст может быть большим, без них не обойтись. WordWrap – настоятельно рекомендуется включать в тех ситуациях, когда значение MultiLine стоит в True. В этом случае будет производиться автоматический переход на новую строку при достижении границы текстового поля. Наиболее часто используемое событие для текстового поля – это со- бытие Change, то есть изменение содержания поля. Обычно оно исполь- зуется для проверки вводимых пользователем значений или синхрониза- ция введенного значения с другими элементами управления, например, сделать доступной кнопку, изменить текст надписи и т.п. На рис.20 представлена форма ПЛАН_ОТГРУЗКИ, в которой отобра- жён элемент управления TextBox с установленным свойством MultiLine в True. Рис. 20. Использование элемента управления TextBox Форма ПЛАН_ОТГРУЗКИ загружается при выполнении процедуры “Надпись”: Public Sub Надпись() ПЛАН_ОТГРУЗКИ.Show End Sub При внесении изменений в поле элемента управления, например, при вво- де текста “Текстовое поле, введённое при помощи элемента управления TextBox”, выполняется процедура формы ПЛАН_ОТГРУЗКИ TextBox1_Change: Private Sub TextBox1_Change() Range(“A2”).Value = ПЛАН_ОТГРУЗКИ.TextBox1.Value End Sub 64 в результате чего ячейка A2 получает значение текста, введенного в поле элемента управления TextBox1. Выход из формы происходит при щелчке по кнопке Ok. При этом вызывается процедура формы CommandButton1_Click и выполняется оператор Unload Me. 2.11.2.4. Элемент управления ComboBox (комбинированный список) Этот элемент управления предоставляет пользователю возможность выбирать существующие значения из раскрывающегося списка и вводить в поле списка значение, которое отсутствует в списке. Наиболее часто используются следующие свойства элемента ComboBox. RowSource – это свойство указывает диапазон рабочего листа, кото- рый содержит список значений элемента управления RowSource. Value (или Text) – позволяет программным способом установить вы- бранное значение в списке или вернуть выбранное или введенное пользователем значение. Остальные свойства: AutoSize, Enabled, Locked, ControlText, ControlTipText, MaxLength – применяются точно так же, как и для TextBox. Основное событие элемента ComboBox – это Change, то же, что и для TextBox. Обычно при обработке этого события проверяются введенные пользователем значения, которые переносятся в текстовое поле. Список значений элемента управления ComboBox может быть оп- ределён двумя способами: должен храниться в диапазоне ячеек рабочей книги; определяться, используя метод AddItem для добавления значения списка в элемент управления ComboBox. В первом способе в окне Properties устанавливается значение свойства RowSource в виде ссылки на диапазон листа рабочей книги, в котором хранятся значения списка, например, Лист1!B1:B4 или КАРТАЛЫ, где КАРТАЛЫ – имя диапазона-строки или диапазона- столбца (рис. 21,а и рис. 21,б). Рис. 21,а. Диапазон значений элемента управления ComboBox 65 Рис. 21,б. Ссылка на диапазон значений элемента управления ComboBox Значения диапазона ячеек рабочей книги можно менять программно. Во втором способе значения элемента управления ComboBox созда- ются программно перед использованием формы и пропадают после её за- крытия. Ниже приведена процедура Заполнение_ComboBox, заполняющая элемент управления ComboBox названиями кварталов с помощью метода AddItem. В этой процедуре ShouКвартал – имя формы, КВАРТАЛЫ – имя элемента управления ComboBox и значение свойства Caption формы ShouКвартал. Public R As Variant Sub Заполнение_ComboBox() ' Заполнение элемента управления ComboBox ShouКвартал.КВАРТАЛЫ.RowSource = “” ShouКвартал.КВАРТАЛЫ.AddItem “КВ1” ShouКвартал.КВАРТАЛЫ.AddItem “КВ2” ShouКвартал.КВАРТАЛЫ.AddItem “КВ3” ShouКвартал.КВАРТАЛЫ.AddItem “КВ4” ShouКвартал.Show MsgBox “R=” & R End Sub Кроме создания значений элемента управления ComboBox, в этой процедуре осуществляется вывод на экран формы ShouКвартал (исполь- зуется метод Show) и значения переменной R. Переменная R получает значение в процедуре Ok_Click формы обработки события нажатия кнопки. Переменная R должна быть объявлена как Public перед самой первой стандартной процедурой. На рис.22 приведёна форма ShouКвартал, в которой значения элемента ComboBox получены любым из приведённых выше способов. 66 Рис. 22. Форма ShouКвартал В форме ShouКвартал КВАРТАЛЫ – это заголовок формы, получен- ный присвоением параметру Caption значения КВАРТАЛЫ. Щелчок по кнопке Ok формы вызывает процедуру Ok_Click обработки этого события: Private Sub Ok_Click() Range(“A1”).Value = ShouКвартал.КВАРТАЛЫ.Value R = ShouКвартал.КВАРТАЛЫ.Value End Sub В результате её выполнения ячейка A1 активного листа и переменная R получат значение выбранной позиции в списке (на рис. 22 это КВ2). При нажатии кнопки “Выйти” выполняется процедура Выйти_Click формы модуля ShouКвартал: Private Sub Выйти_Click() Unload Me End Sub В результате выполнения процедуры Выйти_Click происходит выгрузка формы ShouКвартал из памяти. |