Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / vba_2002

.pdf
Скачиваний:
82
Добавлен:
09.04.2015
Размер:
9.9 Mб
Скачать

Sub 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

Excel позволяет создавать "настоящие" меню и панели инструментов. Более подробная информация об этом приведена в главах 22-23.

Выбор диапазона

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

Пользовательское диалоговое окно также обеспечивает подобную функциональность. Это достигается в результате применения элемента управления RefEdit . Данный элемент выглядит иначе, чем элемент управления выбора диапазона во встроенных ДИЕШОГОВЫХ окнах Excel, однако работает точно так же. Если пользователь щелкнет на небольшой кнопке в правой части элемента управления, то диалоговое окно временно исчезнет, а на экране будет отображен небольшой указатель диапазона (именно так все происходит и при использовании встроенно-

го диалогового окна Excel).

Рис. 14.3. Элемент управления RefEdit позволяет выбирать необходимый диапазон

На рис. 14.3 представлено пользовательское диалоговое окно с добавленным элементом управления RefEdit. Это диалого- в о е о к н о выполняет простую математическую операцию над всеми не содержащими формул и непустыми ячейками указан-

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

элемента управления RefEdit .

• Элемент управления возвращает текстовую строку, которая представляет выбранный диапазон. Можно преобразовать эту строку в объект Range. Для этого используется следующий оператор:

Set UserRange = Range(RefEditl.Text)

Удачной практикой считается инициализация элемента управления RefEdit для представления текущего выделения. Для этого в процедуре UserForm_mitialize воспользуйтесь оператором

RefEditl.Text = ActiveWindow.RangeSelection.Address

Элемент управления RefEdit не всегда возвращает действительный диапазон. Выделение диапазона указателем мыши — это один из способов присвоения значения данному элементу управления. Пользователь может ввести в поле любой 'секст, а также отредактировать или удалить уже отображаемый текст. Таким образом, предварительно необходимо убедиться, что диапазон является допустимым. Следующий код — это пример одного из способов проверки допустимости введенного значения. Если определено, что значение неправильное, то пользователю выдается сообщение, а элемент управления RefEdit становится активным, чтобы предоставить возможность ввести корректный диапазон.

On

Error Resume Next

Set

UserRange = Range(RefEditl.Text)

If Err <>

0 Then

 

MsgBox

"Неправильный диапазон"

 

RefEditl.SetFocus

366

 

Глава 14. Примеры пользовательских форм

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. Примеры пользовательских форм

Соседние файлы в папке 2 семестр