2 семестр / vba_2002
.pdfSub GetDataO
UserForml.TextBoxl.Value = "Джон"
UserForml.Show
End Sub
Еще одним способом установки значения по умолчанию является использование события Initializ e объекта UserForm. Можно написать код процедуры UserForm_Initialize1 который будет располагаться в модуле кода диалогового окна.
Private Sub UserForm_Initialize() TextBoxl.Value = "Джон"
End Sub
Обратите внимание, что при обращении к элементу управления из модуля кода диалогового окна не обязательно вводить в ссылку имя объекта UserForm. Подобное определение ссылок на элементы управления имеет свое преимущество: всегда можно воспользоваться средством Auto List Member, которое позволяет выбирать имена элементов управления т выпадающего списка. Вместо того чтобы использовать фактическое имя объекта UserForrr,, предпочтительнее применить имя Me. В противном случае, если имя объекта UserForm изменится, то вам не потребуется изменять все ссылки (с его участием) в коде.
Использование коллекций элементов управления
Элементы управления пользовательских диалоговых окон составляют отдельную коллекцию. Например, следующий оператор отображает количество элементов управления в диалоговом окне UserForml:
MsgBox UserForml.Controls.Count
Коллекции не представлены для каждого типа элементов управления. Например, не существует коллекции элементов управления CoinmandButton. Но тип элемента управления можно определить с помощью функции TypeName. Следующая процедура использует структуру For Each для циклического просмотра элементов коллекции Control. В результате отображается количество элементов управления commandButton, которые входят в коллекцию элементов управления объекта UserForml.
Sub CountButtons()
Dim cbCount As Integer Dim ctl as Control
cbCount = 0
For Each ctl In UserForml.Controls
If TypeName(ctl) = "CommandButton" Then _ cbCount = cbCount + 1
Next ctl
MsgBox cbCount End Sub
Настройка панели инструментов Toolbox
Если объект UserForm активен в редакторе VBE, панель Toolbox отображает элементы управления, которые можно добавить в пользовательское диалоговое окно. В этом разделе рассматриваются способы настройки окна Toolbox.
Изменение значков или текста подсказок
Если для определенного инструмента предпочтительнее использовать другой значок или текст подсказки, щелкните правой кнопкой мыши на соответствующем инструменте и выберите
Часть IV. Работа с пользовательскими формами |
35£ |
Customize XXX из появившегося контекстного меню (где XXX — это имя элемента управления). На экране появится диалоговое окно, которое позволяет изменить экранную подсказку или значок и загрузить новую пиктограмму из файла.
Добавление новых страниц
Окно Toolbox изначально содержит одну вкладку. Щелкните на ней правой кнопкой мыши и выберите New Page, чтобы добавить новую вкладку в окно Toolbox. Кроме того, можно изменить текст, который отображается на вкладке. Для этого выберите опцию Rename из контекстного меню.
Настройка или комбинирование элементов управления
Рекомендуем предварительно настраивать элементы управления и сохранять их для дальнейшего использования. Можно, например, создать элемент управления CommandButton, который настроен на выполнение роли кнопки ОК. Вы имеет возможность изменять следующие параметры кнопки: Width (Ширина), H e i g h t (Высота), C a p t i o n (Подпись), D e f a u l t (По умолчанию) и Name (Имя). После этого перетащите модифицированный элемент управления CommandButton на панель инструментов Toolbox. Это приведет с созданию нового элемента управления. Щелкните на элементе управления правой кнопкой мыши для того, чтобы переименовать его или изменить значок.
Также можно создать новый раздел окна Toolbox, который будет содержать несколько элементов управления. Например, вы вправе создать два элемента управления CommandButton, которые будут представлять кнопки ОК и Отмена. Настройте их так, как это необходимо. Затем выберите обе кнопки и переместите их в окно панели инструментов Toolbox. Впоследствии можно использовать новый элемент управления окна Toolbox для быстрого создания необходимых кнопок.
Этот метод также применим к элементами управления, которые используются в качестве контейнера. Например, создайте элемент управления Frame и добавьте в него четыре модифицированных элемента управления O p t i o n B u t t o n (соответствующим образом расположив их на форме). После этого перетащите элемент управления Frame на панель инструментов Toolbox, чтобы создать модифицированный элемент управления Frame.
Порой требуется разместить модифицированные элементы управления на отдельной вкладке окна Toolbox. Таким образом, появляется возможность экспортировать вкладку окна Toolbox для совместного использования элементов управления другими пользователями Excel. Для того чтобы экспортировать вкладку окна Toolbox, щелкните на ней празой кнопкой мыши и выберите Export Page.
НаWeb-узлеиздательствасодержитсяфайл.PAGСнекоторымимодифицирован- ными элементами управления. Можно импортировать этот файл в качестве новой вкладки окна Toolbox. Щелкните правой кнопкой мыши на вкладке и выберите команду Import Page. После этого укажите расположение файла .РАС. В результате окно Toolbox будет напоминать показанное на рис. 13.13.
|
Рис. 13.13Окно Toolbox, содержащее |
|
новуювкладкусэлементамиуправления |
360 |
Глава13.Использованиепользовательскихформ |
Добавление элементов управления ActiveX
Пользовательское диалоговое окно содержит также другие элементы управления ActiveX, разработанные фирмой Microsoft и независимыми производителями. Для того чтобы добавить дополнительные элементы управления ActiveX на панель инструментов, щелкните правой кнопкой мыши в окне Toolbox и выберите Additional Controls. В результате будет отображено диалоговое окно, показанное на рис. 13.14.
Рис. 33.14.ДиалоговоеокноAdditional ControlsпозволяетдобавлятьэлементыуправленияActiveX
Диалоговое окно Additional Controls содержит все элементы управления ActiveX, установленные в системе. Выберите элементы управления, которые необходимо вставить на панель инструментов. После этого щелкните на кнопке ОК для добавления значков каждого из выбранных элементов управления.
Не все элементы управления ActiveX, которые установлены е системе, поддерживаются пользовательскими диалоговыми окнами Excel. Скажем более— не поддерживается большая их часть. Кроме того, некоторые элементы управления требуют наличия лицензии на использование в собственных приложениях. Если пользователи приложения не имеют лицензии на использование определенного элемента управления, то на экране появится сообщение об ошибке.
Эмулирование диалоговых окон Excel
Внешний вид и поведение диалоговых окон Windows изменяется от программы к программе. При разработке приложений для Excel рекомендуется следовать стилю диалоговых окон Excel всегда, когда это возможно.
Наилучшим методом изучения способов создания эффективных диалоговых окон является повторное создание одного из стандартных диалоговых окон Excel. Например, удостоверьтесь, что вы правильно определили комбинации клавиш и активизировали элементы управления. Для того чтобы создать копию одного из диалоговых окон Excel, необходимо протестировать его в различных условиях. Один только анализ диалоговых окон Excel поможет улучшить познания в вопросах структуры окон и методов создания элементов управления.
Со временем вы убедитесь, что невозможно повторить отдельные диалоговые окна Excel, даже с помощью VBA. Например, при использовании кнопки Найти все в диалоговом окне Найти и заменить в Excel 2002 диалоговое окно изменяет свой размер. Пользовательское же диалоговое окно может иметь только постоянный размер.
ЧастьIV.Работаспользовательскимиформами |
361 |
Создание "шаблонов" диалоговых окон
Зачастую случается так, что при создании пользовательского диалогового окна каждыйраз на форму добавляются одни и те же элементы управления. Например, все пользовательские диалоговые окна имеют два элемента управления CommandButton, используемых в качестве кнопок ОК и Отмена. В предыдущем разделе рассматривались методы комбинирования элементов управления с целью получения одного элемента управления, обладающего функциями двух. Еще одной программной уловкой может служить "шаблон" диалогового окна, который при необходимости импортируется для последующего создания на его основе других проектов. Преимущество "шаблонного" подхода заключается в следующем: процедуры обработки событий сохраняются вместе с шаблоном.
Начните с создания пользовательского диалогового окна, содержащего все элементы управления и настройки, которые необходимо повторно использовать в других проектах. После этого убедитесь, что диалоговое окно выделено. Выберите команду File^Export File (или нажмите комбинацию клавиш <Ctrl+E>). После этого на экране появится запрос на ввод имени файла. Затем для создания нового проекта на основе шаблона выполните File1^Import File, чтобы загрузить ранее сохраненное диалоговое окно.
Список инструкций по созданию диалогового окна
Перед тем, как предоставлять самостоятельно созданное диалоговое окно на лицезрение пользователям, необходимо удостовериться, что оно работает правильно. Следующий список содержит вопросы, ответы на которые позволяют выяснить наличие и причину потенциальной проблемы.
•Все ли элементы управления одного типа имеют одинаковый размер?
•Равномерно ли распределены элементы управления?
•Не подавляющий ли вил имеет диалоговое окно? Если это так. то следует перегруппи-
ровать элементы управления с помощью элемента управления M u l t i P a g e .
•Ко всем ли элементам управления можно получить доступ с помощью клавиатуры?
•Не повторяются ли комбинации клавиш'?
•Правильно ли установлен порядок активизации элементов управления?
•Выполнит ли код VBA необходимые действия, когда пользователь щелкнет на кнопке ОК или Отмена?
•Нет ли в тексте ошибок?
•Правильный ли текст заголовка диалогового окна?
•Насколько правильно будет отображаться диалоговое окно при всех разрешениях экрана? Иногда текст, который хорошо выглядит на экране с высоким разрешением, на экране VGA отображается не полностью (выходит за пределы видимой области экрана).
•Обеспечено ли логическое группирование элементов управления (а соответствии с выполняемой функцией)?
•Ограничивают ли элементы управления S c r o l l B a r и S p i n B u t t o n диапазон допустимых значений?
•Правильно ли настроены элементы управления ListBox?
362 |
Глава 13. Использование пользовательских форм |
Резюме
Вэтой главе рассматривались способы создания пользовательских диалоговых окон на основе форм UserForm. В ней предоставлен обзор элементов управления, которые можно применять в собственных диалоговых окнах. Кроме того, приведены примеры, которые иллюстрируют работу форм UserForm и их использование совместно с VBA.
Вследующей главе представлено большое количество примеров процедур с использованием VB А и пользовательских диалоговых окон.
Часть IV. Работа с пользовательскими формами |
363 |
В данной главе приведен ряд полезных и информативных примеров, которые описывают дополнительные методы испольчованил диалоговых окон UserForm. Эти методы можно применять в собственных проектах. Все примеры, приведенные
в этой главе, содержаться на Web-узле издательства.
Создание меню с помощью объекта UserForm
Иногда требуется применить пользовательское диалоговое окно в качестве меню.
Дакньгй раздел предлагает описание двух способов получения необходимого результата: с помощью элементов управления CommandButton и посредством элемента управления ListBox,
Использование элементов управления CommandButton
На рис. 14.1 показан пример объекта UserForm, в котором использован элемент управления CommandButton в качестве простого меню. Создание такого меню не вызывает особых трудностей, а код, обеспечивающий работу пользовательского диапогового окна, предельно прост. Каждый элемент управления CommandButton имеет собственную процедуру обработки событий. Например, представленная ниже процедура выполняется при щелчке на кнопке CommandButtonl:
P r i v a t e |
Sub ComrnandButtonl_Click() |
Call |
Macrol |
Unload Me
End Sub
Эта процедура приводит к вызову макроса Macrol и закрывает диалоговое окно UserForn Другие кнопки используют похожие процедуры обработки событий.
Рис. 14.1. Представленное диалоговоеокносодержитэлементыуправления CoimandButton, предназначенныедлясозданияподобияменю
Использование элемента управления ListBox
На рис. 14.2 показан еще один пример создания меню, но на этот раз был применен элемент управления ListBox . Перед отображением пользовательского диалогового окна вызывается процедура обработки события I n i t i a l i z e . Процедура, приведенная ниже, использует метод Addltem для добавления шести опций в элемент управления L i s t B o x .
Private Sub UserForm_Initialize() With ListBoxl
.Addltem "Mac:
.Addltem "Mac:
.Addltem "Mac
.Addltem "Mac
.Addltem "Mac
.Addltem "Mac End With
End Sub
Рис. 14.2. В этом диалоговом окне вкачествеменюиспользуетсяэлемент управления ListBox
Кроме того, процедура обработки события добавлена и к кнопке Выполнить для обработки щелчков не ней.
Private Sub ExecuteButton_Click() Select Case ListBoxl.Listlndex
Case |
-1 |
|
|
|
MsgBox "Выберите макрос." |
||
|
Exit |
Sub |
|
Case |
0: |
Call |
Macrol |
Case |
1: |
Call |
Macro2 |
Case |
2: |
Call |
МасгоЗ |
Case |
3: |
Call |
Macro4 |
Case |
4: |
Call |
Macro5 |
Case |
5: |
Call |
Масгоб |
End Select
Unload Me
End Sub
Данная процедура проверяет значение свойства Listlndex элемента управления ListBox, чтобы определить, какой элемент выбран в списке (если свойство Listlndex равно -1, то не выбран ни один из элементов). После этого запускается соответствующий макрос.
Часть IV. Работа с пользовательскими формами |
365 |
Exit Sub End If
On Error GoTo 0
Пользователь может щелкать на вкладках листов при выборе диапазона, применяя элемент управления Ref E d i t . Поэтому не всегда можно утверждать, что выбранный диапазон находится на активном рабочем листе. Если пользователем выбран другой лист, то адрес диапазона указывается после имени листа, на котором этот диапазон находится. Например:
Лист2!5А$1:$С:4
Если необходимо получить от пользователя выделение в виде одной ячейки, то можно указывать верхнюю левую ячейку выделенного диапазона. 3 данном случае восполь- зуйтесь следующим оператором:
Set OneCell = Range (RefEdit!.. Text) .Range( "Al"
Как отмечалось в главе 12, можно применить функци ю VBA inputBox для того, чтобы позволить пользователю ввести диапазон.
Создание заставки
Некоторые разработчики предпочитают отображать определенную вступительную информацию при запуске приложения. Эта методика приобрела название заставки. Без сомнения, все пользователи видели заставку Excel, которая отображается несколько секунд при запуске программы.
В приложении Excel заставку можно создать с помощью пользовательского диалогового окна. Приведенный ниже пример представлен диалоговым окном, которое отображается автоматически и исчезает по истечении пяти секунд. Следуйте таким инструкциям для создания заставки проекта.
1.Создайте рабочую книгу.
2.Запустите VBE и вставьте новое диалоговое окно UserForm в проект. Код в к о м примере предполагает, что объект UserForm называется U s e r F o r m l .
3.Поместите любые необходимые элементы управления в только что созданное диалоговое окно UserFortnl. Например, вам может понадобиться расположить элемент управления Image, который будет содержать логотип компании. На рис. 14.4 показан пример такого диалогового окна.
Рис.14.4.Этазаставкаотображаетсяприоткрытии рабочей книги в течениеуказанного в коде временного
интервала
Часть IV. Работа с пользовательскими формами |
367 |
4.Вставьте следующую процедуру в модуль кода для объекта ThisWorkbook (ЭтаКнига):
Private Sub Workbook_Open()
UserForml.Show End Sub
5.Вставьте приведенную далее процедуру в модуль кода для объекта UserForml (эта процедура обеспечивает пятисекундную задержку):
Private Sub UserForm_Activate> {) Application.OnTime Mow + _
TimeValue<"00:00:05"), "KillTheForm" End Sub
6.Вставьте следующую процедуру в общий модуль VBA:
Private Sub KillTheForm() Unload UserForml
End Sub
При открытии рабочей книги будет выполнена процедура WorkbookIsOpen. Она отображает диалоговое окно UserForm. В этот момент генерируется событие Activate, которое приводит к выполнению процедуры UserForm_Activate. Данная процедура использует метод OnTime объекта Application для выполнения процедуры KillTheForm в определенный момент времени. Однако предварительно определена задержка в пять секунд с момента возникновения события Activate. Процедура KillTheForm просто выгружает диалоговое окно UserForm из памяти.
7.В качестве необязательного действия можно добавить элемент управления CommandButton с именем CancelButton, установить его свойство Cancel в значение True и добавить представленную ниже процедуру обработки события в модуль кода формы UserForm.
Private Sub CancelButton_Click() KillTheForm
End Sub
Таким образом, пользователь сможет закрыть заставку перед тем, как пройдет указанное время задержки. Окно закрывается также в результате нажатия клавиши <Esc>. Эту небольшую кнопку можно разместить за другим объектом, чтобы она не была видна.
Помните, что заставка не будет отображаться на экране, пока рабочая книга не полностью загружена. Другими словами, если необходимо отобразить заставку для того, чтобы пользователю было на что смотреть, пока загружается рабочая книга, то описанная выше методика для этого не подходит.
Отключение кнопки закрытия пользовательского диалогового окна
Если пользовательское диалоговое окно уже отображено на экране, щелчок на кнопке Закрыть (х в правом верхнем углу) приведет к выгрузке формы UserForm из памяти. Бывают ситуации, когда этого допускать нельзя. Например, необходимо, чтобы диалоговое окно UserForm закрывалась только с помощью щелчка на специальной кнопке CommandButton.
Несмотря на то, что реально отключить кнопку Закрыть невозможно, вы вправе предотвратить закрытие диалогового окна, вызванное щелчком на этой кнопке. Для этого воспользуйтесь обработчиком события QueryClose.
368 |
Глава 14. Примеры пользовательских форм |