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

2 семестр / vba_2002

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

OptionButton

Элемент управления O p t i o n B u t t o n применяется при выборе пользователем одного варианта из нескольких. Эти элементы управления всегда группируются в диалоговом окне в наборы, содержащие не менее двух опций. Когда один элемент управления O p t i o n B u t t o n выбран, все остальные элементы управления O p t i o n B u t t o n текущей группы автоматически становятся неактивными.

Если пользовательское диалоговое окно содержит более одного набора элементов управления OptionButton, то каждый из таких наборов должен иметь собственное значение свойства GroupName. В противном случае все элементы управления O p t i o n B u t t o n в диалоговом окне рассматриваются как члены одной группы. Также можно вставить элементы управления O p t i o n - B u t t o n в объект Frame, что приведет к их автоматическому группированию в текущем разделе.

RefEdit

Элемент управления R e f E d i t используется в том случае, когда пользователь должен выделить диапазон ячеек на листе.

ScrollBar

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

S c r o l l B a r

в некотором смысле подобен

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

S p i n B u t t o n . Разница

заключается

в том, что пользователь может

перетаскивать кнопку

объекта S c r o l l B a r для изменения значения с большим приращением. Элемент управления S c r o l l B a r рекомендуется использовать при выборе значения из большого диапазона.

SpinButton

Элемент управления S p i n B u t t o n позволяет выбрать значение в результате щелчка на одной из двух кнопок со стрелками. Одна из них применяется для увеличении значения, а вторая— для уменьшения. Элемент управления S p i n B u t t o n чэсто используется совместно с элементами управления TextBox или Label, которые содержат текущее значение элемента управления S p i n B u t t o n .

TabStrip

Элемент управления T a b S t r i p подобен элементу управления M u l t i P a g e , однако его использовать сложнее. Элемент управления T a b S t r i p , в отличие от M u l t i P a g e , не выступает контейнером для других объектов. Как правило, элемент управления M u l t i P a g e обладает более широкими возможностями.

TextBox

Элемент управления TextBox позволяет пользователям вводить в диалоговом окне текст.

ToggleButton

Элемент управления T o g g l e B u t t o n имеет два состояния: включен или выключен. Щелчок на кнопке приводит к изменению состояния на противоположное и к изменению внешнего вида кнопки. Этот элемент управления может иметь значение True (активен) или F a l s e

Часть IV. Работа с пользовательскими формами

339

(неактивен). Он не относится к "'стандартным" элементам управления, потому использование Двух элементов управления O p t i o n B u t t o n или одного CheckBox может оказаться более удачным вариантом.

Настройка элементов управления пользовательского диалогового окна

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

Существует возможность выделить несколько элементов управления. При этом следует удерживать нажатой клавишу <Shift> и щелкать на объектах. Можно также

Форма UserForm содержит вертикальные и горизонтальные направляющие, которые помогают выровнять добавленные в диалоговое окно элементы управления. При добавлении или перемещении элемента управления он привязывается к направляющим, что облегчает упорядочивание элементов управления в коне. Если вы не используете направляющие, то можете отключить их, выбрав в VBE команду Tools^Options. В диалоговом окне Options перейдите на вкладку General к выберите соответствуюшие опции в разделе Form Grid Settings.

Меню Format окна VBE предостаилясг несколько команд, которые позволяют точно разместить и выровнять элементы управления в диалоговом окне. Перед использованием этих команд необходимо указать элементы управления, к которым они будут применяться. Эти команды выполняют свои задачи так, как и ожидается. На рис. 13.3 показано диалоговое окно

снесколькими элементами управления O p t i o n B u t t o n в процессе выравнивания.

Использование элементов управления на рабочем листе

Элементы управления пользовательского диалогового окна могут встраиваться непосредственно на рабочий лист. Доступ к этим элементам управления можно получить на панели инструментов Элементы управления (в Excel, а не в VBE). Добавление элементов управления на лист требует намного меньше усилий, чем создание пользовательского диалогового окна. Более того, в данном случае необязательно создавать макросы, так как элемент управления можно связать с любой ячейкой листа. Например, если на лист вставить элемент управления Флажок, то можно связать его с определенной ячейкой, задав значение его свойства Linkedcell. Когда элемент управления Флажок установлен, связанная с ним ячейка содержит значение ИСТИНА. Как только элемент управления сбрасывается, связанная с ним ячейка приобретает значение ложь.

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

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

-> Панель инструментов Формы. Это внедряемые элементы управления, совместимые

с Excel 5 и Excel 95.

ФПанель инструментов Элементы управления. Это элементы управления ActiveX. Они являются подмножеством тех элементов управления, которые доступны в пользовательских диалоговых окнах. Такие элементы управления используются только в Excel 97 и в более поздних версиях, они не поддерживаются в Excel 5 и Excel 95.

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

340

Глава 13. Использование пользовательских форы

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

Для добавления простых кнопок можно использовать элемент управления Кнопка на панели инструментов Формы, так как он обеспечивает запуск макроса. Если же применить элемент управления Кнопка панели инструментов Элементы управления, то щелчок на этой кнопке приведет к запуску процедуры обработки события {например, commandButtonl_click) в модуле кода для объекта лист. Напрямую связать макрос с этим элементом управлении нельзя.

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

Эта и другие рабочие книги, которые демонстрируют применение элементов управления НЕ рабочем листе, представлены на Web-узле издательства.

Рис.13.3.Использованиекоманды Format^Align для изменения взаимногорасположения элементов управления

ЧастьIV.Работаспользовательскимиформами

341

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

Изменение свойств элементов управления

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

В момент проектирования при разработке пользовательского диалогового окна. Для этого используется окно Properties.

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

Использование окна Properties

В VBE окно Properties позволяет изменять свойства выделенного элемента управления (это может быть обычный элемент управления или сама форма UserForm). Кроме того, вы вправе выбрать элемент управления с помощью раскрывающегося списка в верхней части окна Properties (рис. 13.4).

В окне Properties расположены две вкладки. Вкладка Alphabetic представляет свойства выделенного элемента управления а алфавитном порядке. Вкладка Categorized отображает свойства, сгруппированные в логические категории. Обе вкладки содержат одинаковые свойства, но в различном порядке.

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

не Properties будет отображена кнопка со стрелкой, указывающей вниз. Щелкните на этой кнопке для того, чтобы выбрать значение из предложенного списка. Например, свойство Text A l i g n может принимать одно из следующих значений: 1 - fmTextAlignLeft, 2 - fmTextAlignCenter и 3 - fmTextAlignRiglit.

При выделении отдельных свойств (например, Font и P i c t u r e ) рядом с ними отображается небольшая кнопка с троеточием. Щелчок на этой кнопке приводит к вызову диалогового окна настройки свойства. >

Свойство P i c t u r e элемента управления Image стоит рассмотреть отдельно, поскольку для него необходимо указать графический файл. Еще один вариант— вставить изображение из буфера обмена. В последнем случае его сначала следует скопировать в буфер обмена, а затем выбрать свойство P i c t u r e элемента управления Image и нажать комбинацию клавиш <CtrI+V> для вставки содержимого буфера обмена.

 

Рис. 13.4, Выбор элемента vtipaeieHiin (OptionButton3j

 

израскрывающегосяспискавверхнейчастиокнаProperties

342

Глава 13. Использование пользовательских форм

Если выделить два или больше элементов управления, то окно Properties будет отображатьтолькотесвойства,которыеявляютсяобщимидлявыделенныхобъектов.

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

Общие свойства

Каждый элемент управления имеет как собственный набор уникальных свойств, так и ряд общих свойств, присущих другим элементам управления. Например, все элементы управления имеют свойство Name и свойства, определяющие его размер и расположение на форме (Height, Width, Left и Right).

Если вы собираетесь работать с -элементом управления с помощью кода VBA, то ему стоит определить значащее имя. Например, первый элемент управления OptionButton, который добавлен в пользовательское диалоговое окно, по умолчанию получит имя OptionButton].. В коде ссылка на этот объект будет выглядеть следующим образом:

OptionButtonl.Value = True

Но если элементу управления OptionButton присвоить описательное имя (например, obLandscape), то можно использовать оператор

obLandscape.Value = True

Многие пользователи считают, что удобно использовать имена, которые указывают на тип объекта. В предыдущем примере был применен префикс ob для указаниятого, чтообъектпредставляетэлементуправленияOptionButton.

Можно изменять значения свойств нескольких элементов управления одновременно. Например, вы вправе создать на форме несколько элементов управления OptionButton и выровнять их все по левому краю. Для этого достаточно выделить все элементы управления OptionButton и изменить значение свойства Left в окне Properties. Все выделенные элементы управления примут новое значение свойства Left.

Получение дополнительной информации о свойствах

Диалоговое справочное руководство является лучшим способом получения информации о свойствах различных элементов управления. Щелкните на свойстве в окне Properties и нажмите клавишу <Fl>. На рис. 13.5 показан пример справочных сведений, приведенной для выделенного свойства.

Советы по использованию клавиатуры

Многие пользователи предпочитаю? перемещаться по диалоговым окнам с помощью клавиатуры. Комбинации клавиш <ТаЬ> и <Shift+Tab> позволяют циклически переключаться между элементами управления. Чтобы удостовериться, что диалоговое окно корректно реагирует на команды с клавиатуры, обратите внимание на такие моменты: порядок просмотра элементов управления и комбинации клавиш.

ЧастьIV.Работаспользовательскимиформами

343

Рас, 13.5. Диалоговое справочное руководство предоставляет информацию о каждом свойстве •исиептауправления

Изменение порядка просмотра (активизации)

Порядок просмотра определяет последовательность, в которой активизируются элементы управления лри нажатии пользователем комбинации клавиш <ТаЬ> и <Shift+Tab>. Кроме того, порядок активизации указывает, какой элемент управления по умолчанию выделяется на форме первым. Если пользователь вводит текст в элемент управления TextBox, то этот элемент управления считается активным. Если далее щелкнуть на элементе управления O p t i o n B u t t o n , то именно он станет активным, Элемент управления, назначенный первым для просмотра,

будет активным в момент открытия диалогового окна.

 

Для того чтобы указать порядок активизации, выберите

Рис. 13.6. Воспользуйтесь диа-

команду View=>Tab Order. Кроме того, можно щелкнуть пра-

вой кнопкой мыши на диалоговом окне и выбрать Tab Order из

логовым окном Tab Order для

появившегося контекстного меню. В любом случае, Excel ото-

указания порядка просмотра

бразит диалоговое окно Tab Order, которое показано на

[активизации)элементовуправ-

 

рис. 13.6. Диалоговое окно Tab Order содержит упорядочен-

 

ный список всех элементов управления в последовательности,

 

которая соответствует порядку активизации объектов в поль-

зовательском диалоговом окне. Чтобы переместить элемент управления в списке, выберите его к щелкните на кнопке Move Up win Move Down. Можно одновременно перемещать более одного элемента управления (удерживайте при выделении элементов клавишу <Shift> или <CtrI>).

344 Глава 13. Использование пользовательских форм

С другой стороны, можно указать порядок активизации "элемента управления с помощью окна Properties. Первый активизируемый элемент управления будет иметь свойство Т а Ы п - dex, установленное в значение 0. Изменение значения свойства Tablndex текущего объекта приведет к изменению значений свойств T a b l n d e x других элементов управления. Изменения вносятся автоматически. Вы можете удостовериться, что ни один элемент управления не имеет значение свойства Tablndex, большее, чем количество элементов управления в диалог о- вом окне. Если необходимо удалить элемент управления из списка активизируемых объектов, то задайте его свойству TabStop значение F a l s e .

Некоторые элементы управления, такие как Frame и MultiPage, являются контейнерами для других элементов управления. Элементы упрааления в контейнере имеют собственный порядок активизации. Для того чтобы указать порядок активизации для элементов управления OptionButton внутри элемента управления Frame, выделите последний перед тем, как выбирать команду View^Tab Order.

Назначение комбинаций клавиш

Большинству элементов управления диалогового окна можно назначить комбинацию клавишу. Это предоставит пользователю возможность получать доступ к элементу управления в результате нажатия <Alt> и указанной клавиши. Использование свойства A c c e l e r a t o r в окне Properties позволяет определить клавишу для активизации элемента управления.

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

Тестирование пользовательского диалогового окна

Обычно при разработке возникает необходимость в тестировании диалогового окна U s e r - Form. Существует три способа, которые позволяют проверить диалоговое окно без вызова его из процедуры VBA.

•<• Выберите команду Run^Run Sub/UserForm. •Ф- Нажмите клавишу <F5>.

•Ф- Щелкните на кнопке Run Sub/UserForm на панели инструментов Standard.

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

Отображение и закрытие пользовательского диалогового окна

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

Отображение пользовательского диалогового окна

Для того чтобы отобразить пользовательское диалоговое окно с помощью VBA, необходимо создать процедуру, которая вызывает метод Show объекта UserForm. Форму UserFrom

Часть IV. Работа с пользовательскими формами

345

невозможно отобразить, не выполнив как минимум одну строку кода VBA. Если объект U s e r - Form называется UserForml, то следующая процедура отобразит это пользовательское диалоговое окно.

Sub ShowDialog{) UserForml.Show

End Sub

Данная процедура должна располагаться в стандартном модуле VBA, а не в модуле формы UserForm.

Кроме того, VBA поддерживает оператор Load. Загрузка пользовательского диалогового окна приводит к сохранению объекта формы в памяти. Однако до тех пор, пока не будет выполнен метод Show, форма останется невидимой для остальной части пршраммы. Для того чтобы загрузить диалоговое окно U s e r F o r m l , необходимо воспользоваться оператором Load UserForml

Если вы примените сложное диалоговое окно, то вам может понадобиться предварительно загрузить его в память, чтобы в случае необходимости его можно было бы быстро отобразить методом Show. Как правило, использование метода Load не имеет смысла.

Закрытие пользовательского диалогового окна

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

Также можно применить оператор Unload Me

Обычно в коде VBA команда Unload выполняется только после того, как форма UserForm выполнит все свои функции, Например, форма UserForm может содержать элемент управления CommandButton, который используется в качестве кнопки ОК. Щелчок на этой кнопке приводит к выполнению заранее определенного макроса. Один из операторов макроса заключается в выгрузке формы UserForm из памяти. В результате пользовательское диалоговое окно будет отображаться на экране до тех нор, пока макрос, содержащий оператор Unload, не завершит свою работу.

Когда форма UserForm выгружается из памяти, элементы управления, содержавшиеся на ней, возвращаются в первоначальное состояние. Другими словами, в коде нельзя обращаться к значениям, указываемым пользователем, после того, как форма выгружена из памяти. Если значения, введенные пользователем, будут применяться позже (после выгрузки диалогового окна UserForm), то необходимо сохранить их в переменной с областью действия P u b l i c , которая определена в стандартном модуле VBA. Кроме того, значение всегда можно сохранить в ячейке листа.

Диалоговое окно автоматически выгружается из памяти, когда пользователь щелкает на кнопке Отмена (Кнопка х в строке заголовке окна). Это действие приводит к возникновению события Queryclose объекта UserForm, после которого генерируется событие Terminate объекта UserForm.

Объект UserForm может использовать метод Hide. При вызове этого метода диалоговое окно исчезает, но остается в памяти, поэтому в коде можно получить доступ к различным свойствам элементов управления. Ниже приведем пример оператора, который скрывает диалоговое окно:

UserForml.Hide

346

Глава 13. Использование пользовательских форм

Также можно воспользоваться оператором Me.Hide

Если по какой-либо причине необходимо, чтобы пользовательское диалоговое окно было немедленно скрыто в процессе выполнения макроса, воспользуйтесь методом Hide в самом начале процедуры, а затем укажите команду DoEvents. Например, в следующей процедуре форма UserForm немедленно исчезает после того, как пользователь щелкнет на кнопке CommandButton].. Последний оператор процедуры выгружает пользовательское диалоговое окно из памяти.

P r i v a t e Sub CommandButtonl_Click{)

Me.Hide

DoEvents

For r = 1 To 10000 Cells(r, 1} = r

Next r

UnloadMe End Sub

В главе 15 показано, какотображать индикатор прогресса выполнения макроса, основу которого составляет условие: пользовательское окно отображается на экранедотехпор,покавыполняетсямакрос.

О процедурах обработки событий

Как только диалоговое окно появляется на экране, пользователь начинает с ним взаимодействовать— выбирать опции в элементе управления ListBox, щелкать на кнопках CommandButton и т.д. Используя официальную терминологию, можно сказать, что пользователь генерирует события. Например, щелчок на элементе управления CommandButton приводит к возникновению события Click объекта CommandButton. Вам необходимо создать процедуры, которые будут выполняться при возникновении соответствующих событий. Первые иногда известны как обработчики событий.

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

В коде VBA можно изменять свойства элементов управления, пока пользовательское диалоговое окно отображается на экране {т.е. на этапе выполнения). Например, вы можете назначить элементу управления ListBox процедуру, которая изменяет текст элемента управления Label при выборе элемента списка. Подобное поведение элементов управления подробно рассмотрено далее в этой главе.

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

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

ЧастьIV.Работаспользовательскимиформами

347

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

Создание пользовательского диалогового окна

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

Рис.13.7.Этодиалоговоеокно запрашиваетупользователяего

1.Нажмите комбинацию клавиш <Alt+Fl 1> для запуска VBE.

2.В окне Project укажите проект рабочей книги, а затем выберите insert^UserForm, чтобы добавить пустое диалоговое окно.

3.Свойство C a p t i o n объекта UserFonrrt будет иметь значение по умолчанию— User - Forml. Воспользуйтесь окном Properties для того, чтобы изменить значение свойства

C a p t i o n на Введите свое имя и пол (если окно Properties не отображается на экране, нажмите клавишу <F4>).

4.Добавьте на форму элемент управления Label и измените его свойства, как показано ниже.

Свойство Значение

Accelerator N

Caption Имя:

Tablndex О

5.Добавьте элемент управления TextEox и измените его свойства следующим образом.

Свойство Значение

Name TextName

Tablndex 1

6.Добавьте элемент управления Frame и измените его свойства.

Свойство Значение

Caption Пол Tablndex 2

7.Добавьте элемент управления O p t i o n B u t t o n внутри элемента управления Frame и измените его свойства, как показано ниже.

348

Главе 13. Использование пользовательских форм

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