
Информатика_1 / Информатика / VBA Excel 2007
.pdf
котором пользователь может ввести данные вместо выбора из списка. Использование возможности редактирования свойства ComboBox зависит от свойства Style.
Свойство Style элемента управления ComboBox имеет два значения: fmStyleDropDownCombo – чтобы дать возможность вводить данные или выбирать из списка; fmStyleDropDownList – чтобы ограничить выбор только раскрывающимся списком.
Свойство Name элемента управления ListBox устанлено равным DeptList.
Свойство Name элемента управления ComboBox установлено равным TitleList.
3.3.2.Программирование формы и ее элементов управления
Чтобы форму можно было использовать, необходимо создать следующие процедуры:
Макрос для отображения диалогового окна. Это может быть просто макрос в проекте рабочей книги, или процедура какого-нибудь другого объекта в рабочей книге.
Процедура для выхода из диалогового окна, кото-
рая удаляет его. Это обычная процедура события, вызываемая щелчком на одной из кнопок формы.
Дополнительные процедуры, реагирующие на события, возникающие во время отображения формы. Они могут включать начальное изображение формы, щелчки на
41
разных элементах управления или ввод данных в элементы управления формы.
Процедура ПолучитьИмяПользователя отображает пользовательскую форму.
Sub ПолучитьИмяПользователя()
Polz.Show End Sub
К процедурам событий для элемента управления можно получить доступ, щелкнув на элементе управления правой кнопкой мыши, и выбрав из появившегося контекстного меню команду Программа.
Процедура события Click для кнопки ОК может быть использована для скрытия формы и ввода данных элементов управления формы на рабочий лист.
Щелкните правой кнопкой мыши на кнопке ОК и из контекстного меню выберите Программа.
Из списка событий выберите Click. Перед словом Sub в процедурах для событий стоит слово Private. Такие процедуры могут быть вызваны только внутри данного модуля.
Вид данной процедуры:
Private Sub CommandButton1_Click()
Me.Hide
Range("Пользователь").Formula = Me.ИмяПользователя.Text
Range("ОтделПользователя").Formula =
Me.DeptList.Text
Range("ДолжностьПользователя").
Formula =_ Me.TitleList.Text
End Sub
Ключевое слово Me означает ссылку на текущий класс объекта и позволяет не указывать название объекта непосредственно.
Процедура события Click для кнопки Отмена может
42
быть использована для скрытия формы.
Щелкните правой кнопкой мыши на кнопке Отмена и из контекстного меню выберите Программа.
Вид данной процедуры:
Private Sub CommandButton2_Click()
Me.Hide End Sub
При загрузке формы, но перед ее появлением происходит событие инициализации – Initialize. В это время следует установить свойства формы и ее элементов управления. Для задания этой процедуры выполните следующие действия:
В окне проекта дважды щелкните по форме, чтобы открыть окно разработки форм.
Дважды щелкните на фоне формы, чтобы открыть окно программы для формы.
Из списка процедур выберите процедуру Initialize. Чтобы в списках появлялись названия отделов и
должностей, их отображают посредством вызова метода AddItem элементов управления списков. Для каждого элемента управления вызвана процедура AddItem с текстом этого элемента. Элементы добавляются один за другим. Также в процедуре устанавливается свойство списков Text.
Private Sub UserForm_Initialize()
Dim DeptTxt As String, TitleTxt As
String
ИмяПользователя.Text =
Range("Пользователь").Text DeptTxt =
Range("ОтделПользователя").Text TitleTxt =
Range("ДолжностьПользователя").Text With Me.DeptList
.AddItem "Бухгалтерия"
.AddItem "Производство"
43
.AddItem "Управление"
.AddItem "Кадры"
.AddItem "Сбыт"
.AddItem "Реклама"
.AddItem "Транспорт"
.AddItem "Поддержка"
.AddItem "Маркетинг"
.Text = DeptTxt
End With
With Me.TitleList
.AddItem "Пользователь"
.AddItem "Администратор"
.AddItem "Ассистент"
.Text = TitleTxt End With
End Sub
Чтобы информация из формы могла передаваться на лист, следует задать имена ячейкам: «Пользователь», «ОтделПользователя», «ДолжностьПользователя».
3.3.3. Использование флажков, переключателей и рамок
Элементы управления Frame (рамка) используются для объединения в группу нескольких других элементов управления. Элементы управления OptionButton (переключатели) используются для выбора одного элемента из группы элементов. Переключатель может содержать любое количество элементов, но поскольку он занимает много места, используют небольшие списки переключателей (не больше шести элементов). Если в форме только одна группа переключателей, то их не стоит заключать в рамку. Если предполагается использование рамок, проще разместить сначала рамку, а затем переключатели внутри рамки. С помощью элементов управления CheckBox можно задавать простые вопросы (True/False или Yes/No). Действия флажков независимы один от другого.
44

Форма, изображенная на рисунке, создается аналогично форме Пользователь.
переключатели
рамка
флажок
свойство Name для формы задано InOf, а свойство Caption – Информация об офисе.
свойства Caption для первой рамки – Ofis, для второй – Status.
свойства для переключателей в первой рамке: Name соответственно Moskow, Kiev, SP; а свойства Caption – Москва, Киев, Санкт-Петербург.
свойства для переключателей во второй рамке:
Name соответственно Stavka, Exam, PerHour; а свойства
Caption – Ставка, Исп. срок, Повременная.
код для события Click кнопки Отмена, аналогичен предыдущей форме.
Для вывода информации на лист ячейкам заданы имена «Офис», «Статус», «Оздоровительный план», «План401К».
Private Sub CommandButton1_Click()
Me.Hide
If Moskow.Value = True Then
Range("Офис").Formula = "Москва"
ElseIf Moskow.Value = True Then
45
Range("Офис").Formula = "Киев" Else
Range("Офис").Formula = "Санкт-Петербург" End If
If Stavka.Value = True Then Range("Статус").Formula = "Ставка"
ElseIf Exam.Value = True Then Range("Статус").Formula = "Исп. срок"
Else
Range("Статус").Formula = "Повременная" End If
If HealthPlan.Value = True Then Range("ОздоровительныйПлан").Formula =
"Подходит" Else
Range("ОздоровительныйПлан").Formula =
"Нет"
End If
If Chk401Plan.Value = True Then Range("План401К").Formula = "Подходит"
Else
Range("План401К").Formula = "Нет" End If
End Sub
Private Sub UserForm_Initialize()
Select Case Range("Офис").Text
Case "Москва"
Moskow.Value = True
Case "Киев"
Kiev.Value = True
Case "Санкт-Петербург"
SP.Value = True
Case Else
Moskow.Value = True
End Select
Select Case Range("Статус").Text
Case "Ставка"
Stavka.Value = True
Case "Исп. Срок"
Exam.Value = True
Case "Повременная"
46

PerHour.Value = True Case Else
Stavka.Value = True End Select
End Sub
3.3.4. Использование выключателей и счетчиков.
Элемент управления выключатель (ToggleButton) очень похож на флажок и имеет то же назначение. Разница в отображении элементов: выключатель внешне похож на кнопку, но его состояние соответствует значению, связанному с элементом управления. Если кнопка изображена нажатой, ее состояние представляет значение True, не нажатой – значение False.
Элемент управления счетчик (SpinButton) используется для изменения числовых значений текстовых полей. Щелчки на кнопках со стрелками вызывают события SpinUp и SpinDown в зависимости от того, на какой из стрелок щелкнул пользователь. Поэтому следует определить, какие действия будут выполнены при возникновении одного из этих событий. На изображенной форме счетчик используется для модификации значения в текстовом поле путем его увеличения или уменьшения на 10 км. В процедуре SpinDn есть проверка среднего значения пробега, чтобы значение не было меньше нуля.
Свойство Name для формы - DataPr, для выключа-
телей – TogglePublic и ToggleCar, для поля – txtCommuteKM, для кнопки ОК – OkdButton, для кнопки
47
Отмена – CancelButton.
Свойство Picture выключателя содержит картинку.
События для формы (Initialize), для стрелок счетчика и для кнопок, заданы в соответствии с приведенными программами.
Ячейки рабочего листа имеют имена «Общественный», «Автомобиль» и «ДневнойПробег».
Для отображения формы задана процедура:
Private Sub UserForm_Initialize()
If Range("Общественный").Text = "Да" Then
Me.TogglePublic.Value = True
Else
Me.TogglePublic.Value = False
End If
If Range("Автомобиль").Text = "Да" Then
Me.ToggleCar.Value = True
Else
Me.ToggleCar.Value = False
End If
Me.TxtCommuteKM.Text =
Range("ДневнойПробег").Text
End Sub
Private Sub SpinCommute_SpinUp()
Dim Kilometr As Variant
Kilometr = Me.TxtCommuteKM.Text
If Kilometr = "" Then
Kilometr = 10
Else
Kilometr = Kilometr + 10
End If
Me.TxtCommuteKM.Text = Kilometr
End Sub
Private Sub CancelButton2_Click()
Me.Hide
End Sub
Private Sub SpinCommute_SpinDown()
Dim Kilometr As Variant
48
Kilometr = Me.TxtCommuteKM.Text
If Kilometr = "" Then
Kilometr = 10
Else
Kilometr = Kilometr - 10
If Kilometr < 0 Then
Kilometr = 0
End If
Me.TxtCommuteKM.Text = Kilometr
End Sub
Private Sub OKdButton_Click() Me.Hide
If Me.TogglePublic.Value = True Then Range("Общественный").Formula = "Да"
Else
Range("Общественный").Formula = "Нет"
End If
If Me.ToggleCar.Value = True Then
Range("Автомобиль").Formula = "Да"
Else
Range("Автомобиль").Formula = "Нет"
End If
Range("ДневнойПробег").Formula =
Me.TxtCommuteKM.Text End Sub
3.3.5. Использование элементов управления набора вкладок и набора страниц
В приложениях Windows вкладки часто используются для диалоговых окон. Использование вкладок позволяет поместить в диалоговом окне множество элементов управления, разбивая их на категории.
Элемент управления MultiPage (набор страниц) позволяет создать две или более страниц в форме. Каждая страница содержит собственный набор элементов управления, которые действуют независимо друг от друга. Это позволяет разделить сложную форму на разделы, сделав ее более наглядной для пользователя.
Элемент управления TabStrip (набор вкладок) по-
49
зволяет использовать простой набор элементов управления для нескольких наборов данных. Набор вкладок применяется, если есть несколько наборов данных в форме, которая использует простой набор связанных элементов управления.
Можно переименовывать вкладки, а также добавлять страницы. Номер отображаемой страницы задается свойством Value (0 – для первой страницы и т.д.).
На второй странице содержится элемент управления TabStrip. Одна и та же пара текстовых полей будет использоваться для всех четырех телефонов, поскольку для каждого телефона задается номер и код. Данные о телефонах будут храниться в массиве (переменная Phones) из четырех строк и двух столбцов. Массив объявляется в разделе (Общая область). Таким образом, массив будет доступен только для процедур формы. Для элемента управления TabStrip есть процедура события, программируемая так, чтобы каждый раз при выборе пользователем вкладки, текстовые поля набора вкладок обновлялись. Процедура события Change содержит операторы для копирования значений массива Phones в текстовые поля в зависимости от того, какая вкладка набора выбрана. У элемента управления TabStrip также есть свойство Value, которое равно 0, если выбрана первая страница и т.д. На рабочем листе следует задать имя диапазону ячеек, в которые будут копироваться номера телефонов.
События для элементов формы программируются аналогично предыдущим примерам
50