Основные свойства списков: List(i) – i-й элемент в списке; ListIndex – номер выбранного элемента в списке; ListCount – количество элементов в списке; RowSource – источник заполнения списка ComboBox или ListBox.
Основные методы обработки списков: AddItem – добавить элемент в список; RemoveItem – удалить указанный элемент из списка; Clear – удалить весь массив из списка.
Например, чтобы добавить элемент Cos(4) в список List1, необходимо записать (и затем выполнить) строку кода: List1.AddItem Cos(4).
Чтобы удалить из комбинированного списка Combo1 второй элемент, необходимо записать Combo1.RemoveItem 2.
8.4. Использование комбинированного списка
Пример 8.4. Пусть имеется список группы, в котором содержатся сведения об оценках, полученных студентами во время сессии (рис. 8.3).

Рис. 8.3. Рабочий лист Excel со списком группы
Требуется подсчитать средний балл для конкретного студента, выбранного из списка.
На рабочем листе с помощью панели Элементы управления создадим кнопку с надписью «Средний балл».
Для выбора фамилии студента разработаем форму, представленную на рис. 8.4. На этой форме с именем UserForm1 создадим комбинированный список ComboBox1 с надписью «Раскройте список, выберите фамилию, нажмите кнопку» в элементе управления Label1.
Командная кнопка с заголовком «Расчет среднего балла» запускает программу расчета. В поле TextBox1 выводится полученный результат, перед этим полем в метке Label2 сделана надпись «Средний балл».

Рисунок 8.4. Пользовательская форма
Для кнопки «Средний балл», которая находится на рабочем листе Лист1, запишем программу:
Sub CommandButton1_Click()
I = 4
Do Until Worksheets(“Лист1”).Cells(I, 1)=””
I = I + 1
Loop
J = I - 1
UserForm1.ComboBox1.RowSource = "Лист1!b4:b” & J
UserForm1.Show
End Sub
Здесь ”” означает пустую ячейку. В переменной J определяется номер последней заполненной строки в таблице. Затем с помощью метода RowSource заполняется комбинированный список ComboBox1 информацией из ячеек b4:bJ. С помощью метода Show форма вызывается на экран.
Для кнопки «Расчет среднего балла» запишем программу:
Sub CommandButton1_Click()
n = UserForm1.ComboBox1.ListIndex + 1
s = 0
For i = 1 To 4
b = Worksheets("Лист1").Cells(n + 3, i + 2).Value
s = s + b
Next
a = s / 4
UserForm1.TextBox1.Text = a
End Sub
В этой программе определяется номер выбранного элемента списка посредством свойства ListIndex, а затем высчитывается средний балл. Полученный результат помещается в текстовое окно TextBox1 на форме.
8.5. Работа с простым списком
Пример 8.5. Пусть требуется по результатам сессии определить фамилии двоечников для списка студентов, представленного на рис. 8.3.
Создадим форму пользователя, в заголовке которой напишем «Список двоечников» (в свойстве Caption), имя формы изменим на Neud (в свойстве Name). На форме разместим достаточно большой простой список (ListBox1). Тогда программа для некоторой кнопки на рабочем листе может выглядеть следующим образом:
Sub CommandButton1_Click()
i = 4
Do Until Worksheets("Лист").Cells(i, 1) = ""
For j = 1 To 4
oc = Worksheets("Лист1").Cells(i, j + 2)
If oc < 4 Then
Neud. ListBox1.AddItem Worksheets("Лист1").Cells(i, 2)
GoTo 1
End If
Next j
1: i = i + 1
Loop
End Sub
Здесь i – номер строки в таблице на рабочем листе Лист1 со списком группы, он начинается с 4, так как фамилии студентов записываются с четвертой строки.
В цикле Do…Loop просматривается содержимое списка студентов по строчкам до тех пор, пока не встретится пустая ячейка.
В цикле For…Next проверяются оценки каждого студента и, если встретилась оценка ниже 4, то фамилия такого студента помещается в список на форме. При этом проверять другие оценки этого студента уже не нужно, поэтому оператор GoTo выполняет переход по метке 1, где наращивается номер строки в таблице. В качестве метки может использоваться любое сочетание буквенных и цифровых символов.
8.6. Задание для выполнения на компьютере
1. Опробовать приведенные выше примеры 8.1-8.3. Внести изменения в программы с тем, чтобы изменить параметры шрифта, цвет, направление движения элементов управления.
2. Для программ, разработанных по условиям табл. 5.2, организовать ввод исходных данных из полей формы и размещение полученных результатов в поля или надписи на форме.
3. Опробовать примеры 8.4 и 8.5. Добавить в таблицу (рис. 8.3) дополнительные сведения о годе рождения студентов, адресе и т. п.
4. Разработать пользовательскую форму, в которой выбиралась бы фамилия студента и определялся год рождения, адрес или другие параметры. Записать программы для кнопок, размещенных на рабочем листе и на пользовательской форме.
9. ПРИМЕР РАЗРАБОТКИ ИНЖЕНЕРНОГО ПРОЕКТА
9.1. Постановка и решение задачи
Пусть на рабочем листе с названием Товар располагается таблица вида.
Наименование | Цена, руб | Количество |
Стул | 80 000 | 50 |
Стол | 120 000 | 40 |
Кресло | 200 000 | 15 |
Шкаф | 1200 000 | 20 |
Шапка таблицы записана в первой строке. На рабочем листе Заказчики хранится информация о заказчиках.
Фирма | Адрес | Телефон | Р/с |
Рассвет | Минск, ул. Коржа, 2 | 211-23-34 | 10010007 |
Восток | Витебск, пр-т. Мира, 5 | 222-45-67 | 10020009 |
Вест | Гродно, ул. Кирова, 1 | 333-45-78 | 10030008 |
Луч | Гомель, ул. Буре, 4 | 444-56-90 | 10040005 |
Требуется сформировать информацию о заказанном товаре на рабочем листе Платеж, приведенном на рис. 9.1.

Рис. 9.1. Рабочий лист Платеж
Для организации диалога при оформлении заявки заказчиком надо создать диалоговое окно UserForm1 с интерфейсом, представленным на рис. 9.2.

Рис. 9.2. Форма для выбора товара
На рабочем листе Платеж следует расположить кнопки с названиями «Заказ товара» и «Очистка» вне области с информацией. Командная кнопка «Заказ товара» должна заполнить раскрывающиеся списки на форме названиями товаров и фирм-заказчиков исходя из информации, имеющейся на листах Товары и Заказчики, и вызвать на экран форму UserForm1:
Sub CommandButton1_Click()
k = 2
Do While Worksheets("Заказчики").Cells(k, 1) <> ""
UserForm1.ComboBox1.AddItem Worksheets("Заказчики").Cells(k, 1)
k = k + 1
Loop
k = 2
Do While Worksheets("Товары").Cells(k, 1) <> ""
UserForm1.ComboBox2.AddItem Worksheets("Товары").Cells(k, 1)
k = k + 1
Loop
UserForm1.Show
End Sub
В тексте программы учтено, что первая строка на рабочих листах Товары и Заказчики содержит названия столбцов, и поэтому цикл начинается со значения k = 2. При этом циклы для заполнения комбинированных списков Заказчики и Товары практически совпадают, однако их нельзя объединить в один, поскольку количество заказчиков и товаров может быть разным.
Командная кнопка «Очистка» на листе Платеж должна очищать те ячейки, которые будут заполняться после выполнения диалога на окне UserForm1. Для очистки ячеек используется метод ClearContents, а область очищаемых ячеек задается объектом Range:
Sub CommandButton2_Click()
Worksheets("Платеж").Range("b8:b10").ClearContents
Worksheets("Платеж ").Range("a13:d13").ClearContents
Worksheets("Платеж ").Range("b17").ClearContents
End Sub
Поскольку кнопка «Очистка» находится на листе Платеж, то указание имени листа (Worksheets("Платеж").) можно опустить.
В ходе выполнения диалога в окне UserForm1 необходимо раскрыть и выбрать из списка «Заказчик» фирму-заказчика, а из списка «Товар» – наименование товара. В поле Количество заказчик определяет нужное ему количество товара.
Программа для командной кнопки «Принять заказ» на форме пользователя должна заполнить ячейки на рабочем листе Платеж, подсчитать стоимость товара и заполнить поле даты. В программе учтено то, что нумерация элементов в комбинированном списке начинается с нуля:
Sub CommandButton1_Click()
n = ComboBox1.ListIndex + 1
Worksheets("Платеж").Range("b8") = Worksheets("Заказчики").Cells(n + 1, 1)
Worksheets("Платеж").Range("b9") = Worksheets("Заказчики").Cells(n + 1, 2)
Worksheets("Платеж").Range("b10") = Worksheets("Заказчики").Cells(n + 1, 4)
m = ComboBox1.ListIndex + 1
Worksheets("Платеж").Range("a13") = Worksheets("Товары").Cells(m + 1, 1)
Worksheets("Платеж").Range("b13") = Worksheets("Товары").Cells(m + 1, 2)
Worksheets("Платеж").Range("c13") = TextBox1.Text
a1 = Worksheets("Платеж").Range("b13")
a2 = Worksheets("Платеж").Range("c13")
Worksheets("Платеж").Range("d13") = a1 * a2
Worksheets("Товары").Cells(m + 1, 3) = Workheets("Товары").Cells(m + 1, 3) - TextBox1.Text
Worksheets("Платеж").Range("b17") = Date
Worksheets("Платеж").Activate
End
End Sub
Встроенная функция Date определяет текущую дату. При выполнении оператора End произойдет закрытие диалогового окна пользовательской формы и на экране останется лист Платеж.
После формирования листа Платеж его можно напечатать с помощью кнопки «Печать», которая может быть размещена на этом же листе вне ячеек с информацией:
|
Из за большого объема этот материал размещен на нескольких страницах:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 |


