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

Лабораторная работа №3. Использование элементов управления в приложениях vba

Основные сведения о создании форм.

VBA позволяет создавать собственные диалоговые окна (формы) самостоятельно. В проект можно добавить произвольное число форм.

При создании формы автоматически отображается набор инструментов, который позволяет разместить ряд элементов управления в форме. Однако, если эта панель убрана с экрана, то для повторного ее вывода нужно выбрать команду View\Toolbox (Вид\Панель элементов).

Краткий обзор базовых элементов управления в формах

На рисунке 1 показаны имена элементов управления, а в таблице 1 содержится их описание.

Кроме стандартного набора инструментов в распоряжении пользователя находится множество других элементов.

После размещения в форме требуемых элементов управления необходимо задать порядок перехода от одного элемента управления к другому. Порядок перехода определяет последовательность, в которой активизируются объекты при нажатии клавиши <Tab>.

Рис 1. Панель элементов

Таблица 1.

Элементы управления набора инструментов

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

Использование/Описание

Поле (Edit Box)

Отображает данные и используется для ввода информации

Надпись(Label)

Отображает неизменяемый текст в формах, например заголовки для других элементов управления

Флажок(CheckBox)

позволяет задать значение "Истина" или "Ноль"

Поле со списком (ComboBox)

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

Окончание табл. 1.

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

Использование/Описание

Список (ListBox)

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

Кнопка (CommandButton)

Создает кнопку, при нажатии которой выполняется команда

Переключатель (OptionButton)

Используется для предоставления выбора одного варианта из многих

Рамка (Frame)

Позволяет установить графическую или функциональную группировку элементов управления

Счетчик (Snipper)

Используется для увеличения или уменьшения числовых значений

Рисунок (Image)

Отображает в форме импортированный рисунок

Выключатель (Toggle)

Создает кнопку, имеющую два состояния: включено и выключено

Элемент управления TextBox (Поле) позволяет ввести в форму информацию, которую затем можно использовать в программе или вывести данные.

После создания элемента управления рекомендуется сразу присвоить ему имя, иначе ему будет присвоено имя по умолчанию. При присваивании названий полей рекомендуется придерживаться следующего правила: txtИмяОбъекта.

Установка и получение содержимого поля

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

Свойство Value используется как для установки, так и для получения содержимого поля. Данное свойство имеет тип Variant.

Например, в поле заносится значение "ABCDEF":

txtMyControl.Value="ABCDEF"

или в поле заносится число 100:

txtMyControl.text=100

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

Dim varResult As Variant

varResult= txtMyControl.Value

Запрет доступа к полю

В некоторых случаях требуется запретить пользователю изменять содержимое поля, например, если объект TextBox используется для отображения доступной только для чтения информации, такой как имена файлов. Чтобы отключить поле, требуется присвоить его свойству Enabled значение False. Задавая для свойства Enabled значение True, можно разрешить изменение содержимого поля.

Пример использования свойства Enabled:

txtMyControl.Enabled = False

или

txtMyControl.Enabled = True

Получение и установка выделенного в поле текста

Пользователь выделяет символы в элементе TextBox либо перетаскивая указатель мыши по тексту, либо используя клавиши <Left> или <Right>, одновременно удерживая нажатой клавишу <Shift>. Для хранения выбранного в поле текста используется свойство SelText.

Например,

Dim varSelected as Variant

VarSelected = txtMyControl.SelText

Для установления выделенного текста в программе используются свойства SelStart и SelLength элемента управления TextBox.

Например, программа выделяет слово "был":

Dim varText as text

varText = "У Мэри был ягненок"

txtMyControl.Value = varText

txtMyControl.SelStart =8

txtMyControl. SelLength =3

Автоматическая установка размеров поля

Для автоматической установки ширины поля можно присвоить свойству поля AutoSize значение True. При этом ширина поля уменьшается или увеличивается в зависимости от числа находящихся в нем символов.

Пример использования свойства AutoSize:

txtMyControl.AutoSize = True

Элемент управления Label (Надпись) используется для вывода текста в форме, например, заголовка, не имеющих собственного свойства Caption объектов формы, таких как поле или рисунок. В этом случае надпись находится около элемента управления, указывая на назначение элемента.

Добавление надписи в форму

Чтобы указать имя объекта Label, нужно нажать клавишу <F4> сразу после создания надписи, а затем ввести название объекта в поле Имя окна свойств.

Задание текста надписи

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

Пример использования свойства Caption в программе:

MyLabelControl.Caption = "Адрес"

Элемент управления CommandButton (Кнопка) инициирует выполнение некоторого действия, например, запуск, остановку или прерывание процесса. Для указания имени объекта CommandButton нужно нажать клавишу <F4> сразу после создания кнопки, а затем ввести название объекта в поле Имя окна свойств.

Форматирование кнопки

Задание текста, выводимого на кнопке, устанавливается с помощью свойства Caption.

Например:

cbMyControl.Caption = "Нажми меня!"

Для получения текста, выведенного на кнопке:

Dim str_MyCaption As String

str_MyCaption = cbMyControl.

Если весь текст не умещается на поверхности кнопки, то он будет усекаться. Для автоматического изменения размеров объекта CommandButton используется свойство AutoSize:

cbMyControl.AutoSize = True

Задание кнопки по умолчанию

Чтобы назначить в форме кнопку по умолчанию, нужно присвоить ее свойству Default значение True. После этого свойству Default остальных кнопок формы автоматически присваивается значение False.

Например,

CbMyControl.Default=True

Нажатие кнопки

С нажатием кнопки можно связать выполнение некоторого действия, если назначить ее событию Click (Нажатие кнопки) процедуру обработки. Процедура обработки события Нажатие кнопки не имеет параметров. Например:

Private Sub cbMyButton_Click()

Debug.Print "кнопка нажата"

End Sub

Изменение состояния кнопки

Иногда требуется запретить пользователю нажатие кнопки, если оно приведет к нежелательным действиям. При запрете доступа кнопка становится серой. Для отключения объекта CommandButton используется свойство Enabled.

Пример программы показывает, как заблокировать кнопку, инициирующую печать, если принтер не работает:

Public Sub CheckPrinter()

If PrinterNotReady() Then

cbPrint.Enabled=False

GetPrinterReady()

End If

End Sub

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

Задание выделенных элементов списка

В VBA имеется возможность задать число элементов в списке, которые можно выбрать одновременно. Если допускается выделение нескольких пунктов, то имеется возможность указать также, что выбранные элементы списка расположены либо последовательно, либо их порядок является произвольным. Способ выбора элементов определяется значением свойства MultiSelect. Его можно задать как в окне свойств, так и в программе. Описанным вариантам выделения соответствуют следующие значения:

Вариант

Значение

Константа

Один элемент

0

FmMultiSelectSingle

Последовательные элементы

2

FmMultiSelectExtended

Произвольно расположенные элементы

1

FmMultiSelectMulti

Пример задания варианта выбора:

ListBox1.MultiSelect= fmMultiSelectExtended

Добавление элемента списка

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

ListBox.AddItem строка_элемента

Чтобы заполнить список числами, обычно используют цикл For ...Next:

Public Sub PopulateList()

For I=1 To 100

ListBox1.AddItem "Номер элемента: " + str$(I)

Next

End Sub

Определение выделенного элемента списка

Свойство Text элемента управления ListBox содержит выделенный в объекте пункт, если в списке задан выбор только одного элемента. Если в элементе ListBox допускается выбор нескольких элементов, то свойство Text равно пустой строке. Пример вывода выбранного элемента списка в окне отладки:

Debug.Print ListBox1.Text

Кроме этого, для определения выбранного в списке элемента используется свойство ListIndex. Оно содержит номер выделенного пункта. Для списков, в которых можно выбрать несколько элементов, в свойстве ListIndex хранится номер выделенного пункта:

Debug.Print "В списке выбран элемент: "

Debug.Print ListBox1.ListIndex

Определение нескольких выделенных элементов списка

При определении выделенных элементов в элементе управления ListBox, свойство MultiSelect которого равно FmMultiSelectExtended или FmMultiSelectMulti, требуется проверить каждый пункт, чтобы выявить, выбран он или нет. Для этого используется свойство списка Selected, которое при указании индекса проверяемого пункта возвращает результат проверки: True или False.

ListBox.Selected (индекс_пункта) = Boolean

Свойство ListCount содержит общее число элементов в списке ListBox1. Нижняя граница индексов этого объекта равна 0, поэтому требуется просмотреть все пункты, начиная с нулевого и заканчивая элементом с номером ListCount минус 1, который является номером последнего пункта в списке. Свойство List (индекс) объекта Listbox, в котором допускается выбор нескольких элементов, возвращает по номеру пункта его текст.

Пример определения нескольких выделенных элементов списка:

Private Sub CommandButton1_Click()

PopulateList1

End Sub

Private Sub CommandButton2_Click()

CopySelected

End Sub

Private Sub CopySelected()

For i = 0 To (Listbox1.ListCount - 1)

If Listbox1.Selected (i) Then

Listbox2.AddItem Listbox1 .List (i)

End If

Next

End Sub

Public sub PopulateList1()

For i = 0 To 100

ListBox1.AddItem "Номер: " & Str$ (i)

Next

End Sub