Страница:
•если свойство boundColumn равно 0, то свойство value возвращает индекс выбранной строки;
•если свойство boundColumn принимает значение из диапазона от 1 до количества столбцов в списке, то свойство value возвращает элемент из выбранной строки, стоящей в столбце, определенном свойством boundcolumn.
Наиболее часто используемые методы элемента управления ListBox:
clear – удаляет все элементы из списка;
RemoveItem (index) – удаляет из списка элемент с указанным номером, где index – номер элемента;
AddItem ([item[,varIndex]]) – добавляет элемент в список, где item – элемент (строковое выражение), добавляемый в список, и varIndex – номер добавляемого элемента.
Заполнить список можно одним из следующих способов.
Поэлементно, если список состоит из одной колонки
состоит из нескольких
колонок, например двух
При разработке программы использовать одномерный массив, объявляемый в процедуре Fortuna, содержащей все возможные предсказания.
Технология выполнения
1. Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
2. Создайте форму (рис. 38).
3. Пропишите обработчики событий нажатия на кнопки « Вывести предсказание» и « Закрыть».
Рис. 38.Форма примера 20 в рабочем состоянии
При обработке процедуры нажатия кнопки Вывестиможно опираться на нижеприведенный листинг.
Примечание.Обратите внимание на создание процедуры, содержащей массив предсказаний, и вызов этой процедуры из процедуры нажатия кнопки « Вывести предсказание», учитывая «защиту от дурака».
5. Запустите приложение на выполнение.
Пример 21. Создать форму, в текстовые поля которой вводятся имя и пароль. Если пароль введен правильно, то пользователь получает доступ к списку некоторой группы, отражаемой в элементе listbox, при этом выдается сообщение о допуске пользователя к списку. Список организуется программно.
Технология выполнения
1. Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
2. Создайте форму (рис. 39).
Рис. 39.Форма примера 21 в рабочем состоянии. Сообщение о допуске
3. Переименуйте форму с Name на frmOne. Для этого активизируйте форму (щелкните на ней), перейдите в окно свойств объекта (properties), выделите свойство Name (первая строка) и пропишите frmOne.
4. Создайте текстовые поля textbox1 и textbox2. Первое будет использоваться для ввода имени, второе – для ввода пароля, поэтому переименуйте их на txtNameи txtPassword(аналогично пункту 3).
5. Как правило, вводимый пароль не отображается в поле. Чтобы вводимые символы пароля заменялись звездочками, выделите поле пароля, затем в окне Propertiesнайдите свойство PasswordCharи задайте для него значение «*».
6. Добавьте кнопки. Переименуйте первую кнопку на btnOK. Кнопка OK должна быть кнопкой по умолчанию. Это означает, что на нажатие клавиши Enter форма должна реагировать так же, как и на щелчок этой кнопки. Для этого измените значение свойства Defaultкнопки btnOK на True.
7. Переименуйте вторую кнопку на btnCancel. Щелчок кнопки Cancelобычно эквивалентен нажатию клавиши Escape. Чтобы в вашем окне было именно так, задайте значение «True» для свойства Cancel.
8. Создайте процедуру закрытия формы.
9. Создайте процедуру работы кнопки ОК. В заготовке процедуры
10. Создайте процедуру для проверки пароля. Закроем доступ к кнопке OK, пока не введен верный пароль. Для этого измените свойство Enabledкнопки OK на False(доступ к кнопке закрыт) и введите новую процедуру:
11. Заполните список группы. Расположите на форме элемент управления ListBox.По умолчанию его имя ListBox1. Оставим его в таком виде. Заполнить список можно в операторе With:
12. Проверка работы формы. После запуска формы введите свое имя и верный пароль. Должна стать доступной кнопка ok. После ее нажатия появляются сообщение «Имя получил(а) доступ» и заполненный список. После нажатия кнопки Закрытьформа должна закрыться.
4.2. Элементы управления ComboBox, OptionButton и Frame
(поле со списком) создается с помощью соответствующего элемента. Элемент управления СотЪоВохприменяется для хранения списка значений. Он сочетает в себе функциональные возможности списка ListBoxи поля TextBox.В отличие от ListBox,в элементе управления СотЪоВохотображается только один элемент списка. Кроме того, у него отсутствует режим выделения нескольких элементов списка, но он позволяет вводить значение, используя поле ввода, как это делает элемент управления TextBox.
Свойства объекта ComboBox, такие как ListIndex, ListCount, Enabled, List, и методы Clear, RemoveItem и AddItem аналогичны соответствующим свойствам и методам списка ListBox. Кроме того, у него есть ряд уникальных свойств:
DropButtonStyle – устанавливает вид раскрывающегося списка. Допустимые значения:
•fmDropButtonStylePlain – кнопка без символов;
•fmDropButtonStyleArrowDisplays – кнопка со стрелкой;
•fmDropButtonStyleEllips – кнопка с эллипсом;
•fmDropButtonStyleReduce – кнопка с линией.
ListRows – устанавливает число элементов, отображаемых в раскрываемом списке.
MatchRequired – допустимые значения: True (нельзя ввести значения) и False (в противном случае).
MatchFound – допустимые значения: True (среди элементов раскрывающегося списка имеется элемент, совпадающий с вводимым в поле ввода раскрывающегося списка) и False (в противном случае).
(переключатель) создается с помощью соответствующего элемента. Он позволяет выбрать один из нескольких взаимоисключающих параметров или действий. Переключатели обычно отображаются группами, обеспечивая возможность выбора альтернативного варианта (см. п. 3.3).
Элемент управления Frame
(рамка) создается с помощью соответствующего элемента. Он используется для визуальной группировки элементов управления. Основным свойством рамки является caption,отображающее надпись рамки.
Нажатие кнопки «Вычислить» должно привести к выполнению выбранной операции над выбранными числами и выводу результата в поле «Результат» (рис. 40).
Рис. 40.Разработанная форма примера 22 в рабочем состоянии
Технология выполнения
Обсудим, как приведенная ниже программа решает перечисленные пункты задачи и что происходит в программе.
2. Запрещает ввод данных в поле Результат.
3. Связывает с кнопками Вычислитьи Закрыть, а также с переключателями всплывающие подсказки
Процедура нажатия кнопки «Вычислить»производит вычисления с элементами списка в зависимости от выбранной операции. Вводятся переменные n и i, где n играет роль счетчика числа выбранных элементов из списка, а i – вспомогательная переменная. Также вводятся переменные, которые будут содержать результат вычислений: сумма, произведениеи среднее. Все полученные вычисления присваиваются переменной Результат, которая и выдается в текстовое поле.
Процедура нажатия кнопки Вычислить
Пример 23. Разработать программу нахождения среднего балла студентов, выбранных из списка в диалоговом окне «Средний балл». Список содержит фамилию студента и его средний балл (двумерный массив) (рис. 41).
Рис. 41.Разработанная форма примера 23 в рабочем состоянии
Дополнительно для каждого элемента управления следует прописать процедуры для осуществления всплывающих подсказок.
При выполнении задания опирайтесь на приводимые ниже примечания.
Примечание.Обратите внимание на то, что в отличие от примера 22 данный пример требует ввода двумерного списка: столбца фамилий и столбца оценок. Фактически разница заключается лишь в том, что в приведенном примере массив ListBoxl.List, отвечающий за список элементов, был одномерным, а в данном случае должен быть двумерным. Сделать это можно двумя способами:
•непосредственно заполнить двумерный массив ListBoxl.List;
•задать произвольный двумерный массив, а затем присвоить его значение для ListBoxl.List (см. п. 3.1 и 4.1).
Соответственно, для расчета среднего балла следует воспользоваться только элементами второго столбца массива, т. е. вторая координата массива ListBoxl.List должна быть фиксирована на 1 (если индексация массива положена с нуля) или на 2 (если индексация массива положена с 1).
4.3. Элементы управления MultiPage, ScrollBar, SpinButton
[2]
Пример 24. Создать форму, имеющую пять элементов: метка, текстовое поле, список, две кнопки. Ввести в текстовое поле и список по умолчанию текст «поле 1», «список 1» (свойство text соответственно у каждого элемента). Первая кнопка «Нажми» выполняет следующее действие: вызывается диалоговое окно, в котором запрашивается разрешение на удаление очередного элемента формы (их пять). Ответ «да» или «нет» выполняет соответствующее действие. Кнопка «Закрыть» закрывает диалоговое окно.
Примечание.Используя коллекцию Controls, программно в цикле организовать скрытие (не удаление!) элементов управления диалогового окна MyForm (свойство Name формы).
Технология выполнения
1. Запустите приложение Word, сохраните новый документ.
2. Создайте форму в режиме конструктора (рис. 42).
Рис. 42.Форма примера 24
3. Обработайте кнопки Нажмии Закрыть.
Кнопка Нажми
5. Запустите на выполнение (рис. 43, 44, 45).
Примечание.Скрытие ненужных элементов в форме можно произвести и другим способом (например, если в форме слишком много элементов, то до нужного добираться по циклу нерационально). Для этого используют свойство Click элементов управления.
Рис. 43.Первоначальный запуск формы и вызов процедуры кнопки Нажми
Рис. 44.Выполнение скрытия элемента label1 и следующий запрос
Рис. 45.Вид формы перед удалением последнего элемента управления
В этом случае необходимо только щелкнуть по нужному элементу и прописать код, для каждого элемента свой:
Рис. 46.Работа формы по щелчку скрываемого элемента
•Свойство count определяет, какое количество страниц возвращается.
•Свойство value для элемента multipage определяет номер текущей активной страницы в коллекции pages.
•Свойство selecteditem (его можно только читать) возвращает текущую активную страницу (как объект). Его можно использовать для считывания и установки свойств этой страницы и входящих в нее элементов управления.
•Свойство style определяет, в каком виде представляются заголовки страниц. По умолчанию оно равно fmtabstyletabs = 0 и задает представление заголовков в виде закладок в полосе заголовков. Каждая закладка с заголовком находится внутри границ своей страницы. Если значение fmtabstylebuttons = 1, то заголовок каждой страницы находится на отдельной кнопке, расположенной в полосе заголовков. Переход на страницу происходит после выбора кнопки с ее заголовком. Если же значение fmtabstylenone = 2, то полоса с заголовками страниц на экран не выводится.
•Свойство taborientation задает расположение полосы с заголовками страниц (табл. 13).
Таблица 13
•Булево свойство multirow позволяет создать несколько полос с закладками (по умолчанию его значение равно false, что соответствует одной полосе закладок).
•Свойства tabfixedheight и tabfixedwidth устанавливают или возвращают высоту и ширину закладки (в точках). При значении 0 ширина закладок устанавливается автоматически, так чтобы в каждой закладке помещалось ее название и занимало всю ширину элемента. При значениях больше 0 у всех закладок одинаковые размеры, заданные свойством TabFixedWidth. Минимально возможный размер закладки – 4 точки.
Для того чтобы редактировать свойства элемента MultiPage, необходимо выделить этот элемент так, чтобы рамка вокруг элемента выделилась точками (рис. 47). Для этого щелкните по самой рамке, если она выделена черной штриховкой.
Рис. 47.Рамка элемента multipage
Если необходимо установить свойства самих вкладок, необходимо щелкнуть по ним, после чего рамка станет выделяться черной штриховкой (рис. 48).
Рис. 48.Рамка элемента page
Если необходимо добавить еще одну вкладку в режиме конструктора, то необходимо щелкнуть правой кнопкой мыши по последней вкладке (странице) и выбрать команду New Page (рис. 49).
Рис. 49.Добавление новой страницы
Если необходимо переименовать страницу, ввести всплывающие подсказки и установить номер активной по умолчанию страницы, необходимо выбрать команду Rename (рис. 49), в результате которой появляется диалоговое окно, где устанавливаются перечисленные свойства (рис. 50 и 51).
Рис. 50.Установление свойств вкладки
Пример 25. Создать форму, включающую в себя ряд вкладок (страниц), содержащих вопросы некоторого теста. На каждой странице находятся очередной вопрос и кнопка «Ответ», фиксирующая выбор правильного (неправильного) ответа. После перехода на следующую страницу (щелчок по корешку страницы с соответствующим именем) действия повторяются. Итоговая страница содержит кнопку «Результат», которая выводит правильность ответов и сумму набранных баллов (1 правильный ответ = 1 балл).
Рис. 51.Свойства в действии
Создать программу, выполняющую все требования примера.
Технология выполнения
1. Запустите приложение Word и сохраните документ.
2. Перейдите в редактор VBA и создайте форму, содержащую 4 страницы (рис. 52).
Рис. 52.Первая страница теста
3. Оформите первую страницу (рис. 52) и обработайте кнопку «Ответ».
5. Оформите третью страницу теста (рис. 54) и обработайте кнопку «Ответ».
Рис. 54.Третья страница теста
Примечание.Напоминаем, что все предлагаемые листинги примерные и их можно и нужно редактировать по своему усмотрению.
7. Откомпилируйте программу и запустите на выполнение.
Обычно полоса прокрутки используется в паре с другим элементом управления (textbox), в котором она может отображать или от которого может получать свое значение.
Свойства полосы прокрутки следующие.
•Горизонтальная или вертикальная ориентация полосы прокрутки определяется свойством orientation. При его значении по умолчанию fmorientationauto = –1, ориентация полосы определяется автоматически в зависимости от ее размера по горизонтали и вертикали (больший размер задает ориентацию). Значение fmorientationvertical = 0 задает вертикальную ориентацию полосы, fmorientationhorizontal = 1 – горизонтальную.
•если свойство boundColumn принимает значение из диапазона от 1 до количества столбцов в списке, то свойство value возвращает элемент из выбранной строки, стоящей в столбце, определенном свойством boundcolumn.
Наиболее часто используемые методы элемента управления ListBox:
clear – удаляет все элементы из списка;
RemoveItem (index) – удаляет из списка элемент с указанным номером, где index – номер элемента;
AddItem ([item[,varIndex]]) – добавляет элемент в список, где item – элемент (строковое выражение), добавляемый в список, и varIndex – номер добавляемого элемента.
Заполнить список можно одним из следующих способов.
Поэлементно, если список состоит из одной колонки
With ListBox1Массивом, если список состоит из одной колонки
AddItem «июнь»
AddItem «июль»
AddItem «август»
ListIndex=0
End With
With ListBox1Из диапазона A1:B4, в который предварительно введены элементы списка. Результат выбора (индекс выбранной строки) выводится в ячейку С1
List=Array(«июнь»,"июль","август")
ListIndex = 1
End With
With ListBox1Поэлементно, если список состоит из нескольких колонок, например двух
ColumnCount = 2
RowSourse = «A1:B4»
ControlSourse = «C1»
BoundColumn=0
End With
With ListBox1Массивом, если список
ColumnCount = 2
AddItem «июнь»
List(0,1)="сессия"
AddItem «июль»
List(1,1)="каникулы"
AddItem «август»
List(2,1)="отработка"
End With
состоит из нескольких
колонок, например двух
Dim A(2,1) As string
A(0,0) = «июнь»
A(0,1) = «сессия»
A(1,0) = «июль»
A(1,1) = «каникулы»
A(2,0) = «август»
A(2,1) = «отработка»
With ListBox1
ColumnCount = 2
List = A
End With
Задачи на закрепление материала
Пример 20. Создать программу, которая при вводе имени пользователя и числа от 1 до 10 в текстовые поля формы выдает в метку label1 предсказание в зависимости от введенного значения.При разработке программы использовать одномерный массив, объявляемый в процедуре Fortuna, содержащей все возможные предсказания.
Технология выполнения
1. Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
2. Создайте форму (рис. 38).
3. Пропишите обработчики событий нажатия на кнопки « Вывести предсказание» и « Закрыть».
Рис. 38.Форма примера 20 в рабочем состоянии
При обработке процедуры нажатия кнопки Вывестиможно опираться на нижеприведенный листинг.
Примечание.Обратите внимание на создание процедуры, содержащей массив предсказаний, и вызов этой процедуры из процедуры нажатия кнопки « Вывести предсказание», учитывая «защиту от дурака».
Sub fortune(a As String, b As Integer)
Dim today(1 To 10)
today(1) = «Вы станете богатым и знаменитым за 15 минут»
today(2) = «Вам предстоит обед с незнакомцем»
today(3) = «Стоимость Ваших вкладов удвоится!»
today(4) = «Вы получите большой букет от своего почитателя»
today(5) = «Вы опоздаете на пару»
today(6) = «Все Ваши мечты сбудутся»
today(7) = «Вам вернут долг»
today(8) = «Вы выучите лекцию и ответите на опрос»
today(9) = "Вы встретите своего давнего знакомого»
today(10) = «На Вас обратят внимание»
Label3.Caption = a & «, Вас ожидает следующее:» & today(b)
End Sub
Private Sub CommandButton1_Click()4. Откомпилируйте программу.
Dim a As String
Dim b As Integer
a = TextBox1.Text
b = Val(TextBox2.Text)
If b > 0 And b <= 10 Then
Call fortune(a, b)
Else: Label3.Caption = «Вы ввели не то число!»
End If
End Sub
5. Запустите приложение на выполнение.
Пример 21. Создать форму, в текстовые поля которой вводятся имя и пароль. Если пароль введен правильно, то пользователь получает доступ к списку некоторой группы, отражаемой в элементе listbox, при этом выдается сообщение о допуске пользователя к списку. Список организуется программно.
Технология выполнения
1. Откройте приложение Word, сохраните документ и перейдите в редактор VBA.
2. Создайте форму (рис. 39).
Рис. 39.Форма примера 21 в рабочем состоянии. Сообщение о допуске
3. Переименуйте форму с Name на frmOne. Для этого активизируйте форму (щелкните на ней), перейдите в окно свойств объекта (properties), выделите свойство Name (первая строка) и пропишите frmOne.
4. Создайте текстовые поля textbox1 и textbox2. Первое будет использоваться для ввода имени, второе – для ввода пароля, поэтому переименуйте их на txtNameи txtPassword(аналогично пункту 3).
5. Как правило, вводимый пароль не отображается в поле. Чтобы вводимые символы пароля заменялись звездочками, выделите поле пароля, затем в окне Propertiesнайдите свойство PasswordCharи задайте для него значение «*».
6. Добавьте кнопки. Переименуйте первую кнопку на btnOK. Кнопка OK должна быть кнопкой по умолчанию. Это означает, что на нажатие клавиши Enter форма должна реагировать так же, как и на щелчок этой кнопки. Для этого измените значение свойства Defaultкнопки btnOK на True.
7. Переименуйте вторую кнопку на btnCancel. Щелчок кнопки Cancelобычно эквивалентен нажатию клавиши Escape. Чтобы в вашем окне было именно так, задайте значение «True» для свойства Cancel.
8. Создайте процедуру закрытия формы.
9. Создайте процедуру работы кнопки ОК. В заготовке процедуры
Private Sub btnOK_Click()вставьте оператор MsgBox Txtname & «получил(а) доступ». В этом операторе текст, введенный в поле txtName, объединяется с поясняющей строкой и выводится в информационном окне.
End Sub
10. Создайте процедуру для проверки пароля. Закроем доступ к кнопке OK, пока не введен верный пароль. Для этого измените свойство Enabledкнопки OK на False(доступ к кнопке закрыт) и введите новую процедуру:
Private Sub CheckOK()Процедура должна запускаться при вводе нового пароля. Для этого в окне формы щелкните дважды второе текстовое поле (предназначенное для пароля). В появившуюся процедуру
Const pas = «abc» 'Пароль
If Txtpassword = pas Then 'Если текст в поле
Txtpasswordсовпадает с паролем, то btnOK.Enabled = True 'доступ к кнопке OK открыт
Else 'иначе
btnOK.Enabled = False 'доступ к кнопке OK закрыт
End If
End Sub
Private Sub Txtpassword_Change()введите единственную команду CheckOK, которая при внесении любых изменений в поле пароля будет запускать процедуру проверки пароля.
End Sub
11. Заполните список группы. Расположите на форме элемент управления ListBox.По умолчанию его имя ListBox1. Оставим его в таком виде. Заполнить список можно в операторе With:
With ListBox1Здесь List– свойство элемента ListBox, которое является массивом. Вставьте этот оператор в уже имеющуюся процедуру btnOK_Click.
List = Array(«Иванова Марина», «Гончарова Елена», «Зотова Татьяна», «Кринченко Светлана», «Орлов Сергей», «Петров Александр»)
End With
12. Проверка работы формы. После запуска формы введите свое имя и верный пароль. Должна стать доступной кнопка ok. После ее нажатия появляются сообщение «Имя получил(а) доступ» и заполненный список. После нажатия кнопки Закрытьформа должна закрыться.
Дополнительные задания
13. Дополните список с помощью метода AddItem. Синтаксис:ИмяСписка. AddItem «новый элемент списка».14. Обработайте событие, связанное со щелчком по форме (мимо элементов управления). Пусть в ответ на это выводится какое-нибудь сообщение типа «Вы не попали по кнопке!».
4.2. Элементы управления ComboBox, OptionButton и Frame
Поле со списком
Элемент управления СотbоВох(поле со списком) создается с помощью соответствующего элемента. Элемент управления СотЪоВохприменяется для хранения списка значений. Он сочетает в себе функциональные возможности списка ListBoxи поля TextBox.В отличие от ListBox,в элементе управления СотЪоВохотображается только один элемент списка. Кроме того, у него отсутствует режим выделения нескольких элементов списка, но он позволяет вводить значение, используя поле ввода, как это делает элемент управления TextBox.
Свойства объекта ComboBox, такие как ListIndex, ListCount, Enabled, List, и методы Clear, RemoveItem и AddItem аналогичны соответствующим свойствам и методам списка ListBox. Кроме того, у него есть ряд уникальных свойств:
DropButtonStyle – устанавливает вид раскрывающегося списка. Допустимые значения:
•fmDropButtonStylePlain – кнопка без символов;
•fmDropButtonStyleArrowDisplays – кнопка со стрелкой;
•fmDropButtonStyleEllips – кнопка с эллипсом;
•fmDropButtonStyleReduce – кнопка с линией.
ListRows – устанавливает число элементов, отображаемых в раскрываемом списке.
MatchRequired – допустимые значения: True (нельзя ввести значения) и False (в противном случае).
MatchFound – допустимые значения: True (среди элементов раскрывающегося списка имеется элемент, совпадающий с вводимым в поле ввода раскрывающегося списка) и False (в противном случае).
Переключатель и рамка
Элемент управления OptionButton(переключатель) создается с помощью соответствующего элемента. Он позволяет выбрать один из нескольких взаимоисключающих параметров или действий. Переключатели обычно отображаются группами, обеспечивая возможность выбора альтернативного варианта (см. п. 3.3).
Элемент управления Frame
(рамка) создается с помощью соответствующего элемента. Он используется для визуальной группировки элементов управления. Основным свойством рамки является caption,отображающее надпись рамки.
Задачи на закрепление материала
Пример 22. [1] Создать программу, которая позволяет при выделении из списка формы нескольких чисел производить суммирование, находить произведение или среднее значение в зависимости от выбора действия (операции).Нажатие кнопки «Вычислить» должно привести к выполнению выбранной операции над выбранными числами и выводу результата в поле «Результат» (рис. 40).
Рис. 40.Разработанная форма примера 22 в рабочем состоянии
Технология выполнения
Обсудим, как приведенная ниже программа решает перечисленные пункты задачи и что происходит в программе.
UserForm_Initialize1. Активизирует диалоговое окно
2. Запрещает ввод данных в поле Результат.
3. Связывает с кнопками Вычислитьи Закрыть, а также с переключателями всплывающие подсказки
Нажатие кнопки Вычислитьзапускает на выполнение процедуру CommandButton1_ClickОпределяет, какой переключатель выбран. В зависимости от выбранного переключателя производит действие над выбранными в списке числами. Найденное число выводится в поле Результат
Нажатие кнопки Закрытьзапускает на выполнение процедуру CommandButton2_ClickЗакрывает диалоговое окно
Процедура нажатия кнопки «Вычислить»производит вычисления с элементами списка в зависимости от выбранной операции. Вводятся переменные n и i, где n играет роль счетчика числа выбранных элементов из списка, а i – вспомогательная переменная. Также вводятся переменные, которые будут содержать результат вычислений: сумма, произведениеи среднее. Все полученные вычисления присваиваются переменной Результат, которая и выдается в текстовое поле.
Процедура нажатия кнопки Вычислить
Private Sub CommandButton1_Click ()Процедура нажатия кнопки «Закрыть»
Dim i As Integer
Dim n As Integer
Dim Сумма As Double
Dim Произведение As Double
Dim Среднее As Double
Dim Результат As Double
' При выборе первого переключателя вычисляется сумма
If OptionButton1.Value = True Then
Сумма = 0
With ListBox1
For i = 0 To.ListCount – 1
If.selected(i)=true then
Сумма = Сумма +.List(i)
End if
Next i
End With
Результат = Сумма
End If
' При выборе второго переключателя вычисляется произведение выбранных элементов
If OptionButton2.Value = True Then
Произведение = 1
With ListBox1
For i = 0 To.ListCount – 1
If.Selected(i)=True Then
Произведение =Произведение *.List(i)
End if
Next i
End With
Результат = Произведение
End If
' При выборе третьего переключателя вычисляется среднее арифметическое
If OptionButton3.Value = True Then
Среднее = 0
n = 0
With ListBox1
For i =0 To.ListCount – 1
If.Selected(i)=True Then
n=n+1
Среднее = Среднее +.List(i)
End if
Next i
End With
Результат = Среднее /n
End If
' Полученное значение Результатвыводится в текстовое поле
TextBox1.Text = CStr(Format(Результат, «Fixed»))
End Sub
Private Sub CommandButton2_Click()Процедура инициализации диалогового окна заключается в заполнении списка и выводе его на форме, организации всплывающих подсказок, запрещении ввода текста в поле результата на форме.
UserForm1.Hide
End Sub
Private Sub UserForm_Initialize()Примечание.Интересной особенностью приводимой процедуры инициализации UserForm_initialize является то, что заголовок диалогового окна вводится программно при помощи свойства Caption, а не вручную при помощи окна Properties.
With ListBoxl
List = Array(1, 3, 4, 5, 6, 7, 8, 10)
Listlndex = 0 'начальная индексация массива
MultiSelect=fmMultiSelectMulti
End With
' Первоначальный выбор переключателя Суммапри инициализации диалогового окна и задание текста всплывающих подсказок у переключателей With OptionButton1.Value = True
ControlTipText ="Сумма выбранных элементов"
End With
OptionButton2.ControlTipText ="Произведение выбранных элементов"
OptionButton3.ControlTipText = «Среднее значение выбранных элементов»
' Поле Результат не доступно для пользователя
TextBox1.Enabled = False
' Назначение клавише <Enter> функции кнопки Вычислитьи задание текста всплывающей подсказки
With CommandButton1
Default = True
ControlTipText = «Нахождение результата»
End With
' Назначение клавише <Esc> функции кнопки Закрыть и задание текста всплывающей подсказки
CommandButton2.Cancel = True
' Задание заголовка пользовательской формы
UserForm1.Caption = «Операции над элементами списка»
UserForm1.Show
End Sub
Пример 23. Разработать программу нахождения среднего балла студентов, выбранных из списка в диалоговом окне «Средний балл». Список содержит фамилию студента и его средний балл (двумерный массив) (рис. 41).
Рис. 41.Разработанная форма примера 23 в рабочем состоянии
Дополнительно для каждого элемента управления следует прописать процедуры для осуществления всплывающих подсказок.
При выполнении задания опирайтесь на приводимые ниже примечания.
Примечание.Обратите внимание на то, что в отличие от примера 22 данный пример требует ввода двумерного списка: столбца фамилий и столбца оценок. Фактически разница заключается лишь в том, что в приведенном примере массив ListBoxl.List, отвечающий за список элементов, был одномерным, а в данном случае должен быть двумерным. Сделать это можно двумя способами:
•непосредственно заполнить двумерный массив ListBoxl.List;
•задать произвольный двумерный массив, а затем присвоить его значение для ListBoxl.List (см. п. 3.1 и 4.1).
Соответственно, для расчета среднего балла следует воспользоваться только элементами второго столбца массива, т. е. вторая координата массива ListBoxl.List должна быть фиксирована на 1 (если индексация массива положена с нуля) или на 2 (если индексация массива положена с 1).
4.3. Элементы управления MultiPage, ScrollBar, SpinButton
[2]
Коллекция Controls
Для доступа к набору элементов управления диалогового окна можно использовать коллекцию Controls, включающую все элементы управления окна. Каждый элемент управления имеет в этой коллекции индекс, значение которого может быть числом или строкой. Для первого элемента управления индекс равен 0. Числовые индексы определяются порядком размещения элементов в коллекции. Строковое значение индекса соответствует имени (Name) элемента.Пример 24. Создать форму, имеющую пять элементов: метка, текстовое поле, список, две кнопки. Ввести в текстовое поле и список по умолчанию текст «поле 1», «список 1» (свойство text соответственно у каждого элемента). Первая кнопка «Нажми» выполняет следующее действие: вызывается диалоговое окно, в котором запрашивается разрешение на удаление очередного элемента формы (их пять). Ответ «да» или «нет» выполняет соответствующее действие. Кнопка «Закрыть» закрывает диалоговое окно.
Примечание.Используя коллекцию Controls, программно в цикле организовать скрытие (не удаление!) элементов управления диалогового окна MyForm (свойство Name формы).
Технология выполнения
1. Запустите приложение Word, сохраните новый документ.
2. Создайте форму в режиме конструктора (рис. 42).
Рис. 42.Форма примера 24
3. Обработайте кнопки Нажмии Закрыть.
Кнопка Нажми
Private Sub CommandButton1_Click()Кнопка Закрыть
For Each Ctrl In myForm.Controls 'цикл по всем элементам управления
msgCode = vbYesNo + vbQuestion
'Вопрос об очередном элементе управления:
Answer = MsgBox(prompt:="Cкрыть элемент " & Ctrl.Name,
Buttons:=msgCode, Title:="Bonpoc")
If Answer = vbYes Then 'ответ «Да»
Ctrl.Visible = False 'скрыть очередной элемент
End If
Next Ctrl
End Sub
Private Sub CommandButton2_Click()4. Откомпилируйте приложение.
Unload Me
End Sub
5. Запустите на выполнение (рис. 43, 44, 45).
Примечание.Скрытие ненужных элементов в форме можно произвести и другим способом (например, если в форме слишком много элементов, то до нужного добираться по циклу нерационально). Для этого используют свойство Click элементов управления.
Рис. 43.Первоначальный запуск формы и вызов процедуры кнопки Нажми
Рис. 44.Выполнение скрытия элемента label1 и следующий запрос
Рис. 45.Вид формы перед удалением последнего элемента управления
В этом случае необходимо только щелкнуть по нужному элементу и прописать код, для каждого элемента свой:
Private Sub Label1_Click()В результате работа формы будет более рациональной (рис. 46).
msgCode = vbYesNo + vbQuestion
Answer = MsgBox(prompt:="Cкрыть элемент",
Buttons:=msgCode, Title:="Вопрос")
If Answer = vbYes Then
Label1.Visible = False
Else
Label1.Visible = True
End If
End Sub
Рис. 46.Работа формы по щелчку скрываемого элемента
Набор страниц MultiPage
Элемент управления MultiPage объединяет несколько независимых диалоговых окон – страниц (вкладок). Заголовки страниц обычно видны на одной из сторон элемента на их закладках, а переход на страницу происходит после щелчка по ее закладке. Этот простой переход с одной страницы на другую и делает MultiPage удобным средством для представления разнородных данных, относящихся к одному объекту. Такие данные в «бумажных» офисах хранятся обычно в отдельных папках и образуют дела, досье и т. д. Каждая страница из Multipage – это объект типа Page, а все они включены в коллекцию Pages (страницы). При создании элемента MultiPage в него автоматически помещаются две страницы с именами Page1 и Раgе2. Имена можно изменять, присутствует возможность добавления и новых страниц. Рассмотрим основные свойства набора страниц.•Свойство count определяет, какое количество страниц возвращается.
•Свойство value для элемента multipage определяет номер текущей активной страницы в коллекции pages.
•Свойство selecteditem (его можно только читать) возвращает текущую активную страницу (как объект). Его можно использовать для считывания и установки свойств этой страницы и входящих в нее элементов управления.
•Свойство style определяет, в каком виде представляются заголовки страниц. По умолчанию оно равно fmtabstyletabs = 0 и задает представление заголовков в виде закладок в полосе заголовков. Каждая закладка с заголовком находится внутри границ своей страницы. Если значение fmtabstylebuttons = 1, то заголовок каждой страницы находится на отдельной кнопке, расположенной в полосе заголовков. Переход на страницу происходит после выбора кнопки с ее заголовком. Если же значение fmtabstylenone = 2, то полоса с заголовками страниц на экран не выводится.
•Свойство taborientation задает расположение полосы с заголовками страниц (табл. 13).
Таблица 13
Значения свойства TabOrientation
•Булево свойство multirow позволяет создать несколько полос с закладками (по умолчанию его значение равно false, что соответствует одной полосе закладок).
•Свойства tabfixedheight и tabfixedwidth устанавливают или возвращают высоту и ширину закладки (в точках). При значении 0 ширина закладок устанавливается автоматически, так чтобы в каждой закладке помещалось ее название и занимало всю ширину элемента. При значениях больше 0 у всех закладок одинаковые размеры, заданные свойством TabFixedWidth. Минимально возможный размер закладки – 4 точки.
Для того чтобы редактировать свойства элемента MultiPage, необходимо выделить этот элемент так, чтобы рамка вокруг элемента выделилась точками (рис. 47). Для этого щелкните по самой рамке, если она выделена черной штриховкой.
Рис. 47.Рамка элемента multipage
Если необходимо установить свойства самих вкладок, необходимо щелкнуть по ним, после чего рамка станет выделяться черной штриховкой (рис. 48).
Рис. 48.Рамка элемента page
Если необходимо добавить еще одну вкладку в режиме конструктора, то необходимо щелкнуть правой кнопкой мыши по последней вкладке (странице) и выбрать команду New Page (рис. 49).
Рис. 49.Добавление новой страницы
Если необходимо переименовать страницу, ввести всплывающие подсказки и установить номер активной по умолчанию страницы, необходимо выбрать команду Rename (рис. 49), в результате которой появляется диалоговое окно, где устанавливаются перечисленные свойства (рис. 50 и 51).
Рис. 50.Установление свойств вкладки
Пример 25. Создать форму, включающую в себя ряд вкладок (страниц), содержащих вопросы некоторого теста. На каждой странице находятся очередной вопрос и кнопка «Ответ», фиксирующая выбор правильного (неправильного) ответа. После перехода на следующую страницу (щелчок по корешку страницы с соответствующим именем) действия повторяются. Итоговая страница содержит кнопку «Результат», которая выводит правильность ответов и сумму набранных баллов (1 правильный ответ = 1 балл).
Рис. 51.Свойства в действии
Создать программу, выполняющую все требования примера.
Технология выполнения
1. Запустите приложение Word и сохраните документ.
2. Перейдите в редактор VBA и создайте форму, содержащую 4 страницы (рис. 52).
Рис. 52.Первая страница теста
3. Оформите первую страницу (рис. 52) и обработайте кнопку «Ответ».
Dim a As Integer4. Оформите вторую страницу теста (рис. 53) и обработайте кнопку «Ответ».
Private Sub CommandButton1_Click()
If OptionButton3.Value = True Then
a = a + 1
Label11.Caption = «Ответ верен»
Else
Label11.Caption = «Oтвет неверен»
End If
End Sub
Private Sub CommandButton2_Click()Рис. 53.Вторая страница теста
If OptionButton5.Value = True Then
a = a + 1
Label12.Caption = «Ответ верен»
Else
Label12.Caption = «Ответ неверен»
End If
End Sub
5. Оформите третью страницу теста (рис. 54) и обработайте кнопку «Ответ».
Рис. 54.Третья страница теста
Private Sub CommandButton3_Click()Рис. 55.Итоговая страница теста
If OptionButton10.Value = True Then
a = a + 1
Label13.Caption = «Ответ верен»
Else
Label13.Caption = «Ответ неверен»
End If
End Sub
6. Оформите четвертую страницу теста (рис. 55) и обработайте кнопку «Результат».
Private Sub CommandButton4_Click()
Label15.Caption = "вы набрали " & a & «балл(а)»
End Sub
Примечание.Напоминаем, что все предлагаемые листинги примерные и их можно и нужно редактировать по своему усмотрению.
7. Откомпилируйте программу и запустите на выполнение.
Полоса прокрутки ScrollBar
Элемент управления ScrollBar представляет собой вертикальную или горизонтальную полосу, по краям которой расположены кнопки прокрутки, а внутри перемещается бегунок. Значение Value, устанавливаемое в полосе прокрутки или возвращаемое ей, – число, определяемое положением бегунка и границами, определенными в свойствах Min и Мах. Рекомендуемые значения этих границ – от –32 767 до + 32 767 (по умолчанию установлен диапазон [0, 32 767]).Обычно полоса прокрутки используется в паре с другим элементом управления (textbox), в котором она может отображать или от которого может получать свое значение.
Свойства полосы прокрутки следующие.
•Горизонтальная или вертикальная ориентация полосы прокрутки определяется свойством orientation. При его значении по умолчанию fmorientationauto = –1, ориентация полосы определяется автоматически в зависимости от ее размера по горизонтали и вертикали (больший размер задает ориентацию). Значение fmorientationvertical = 0 задает вертикальную ориентацию полосы, fmorientationhorizontal = 1 – горизонтальную.