Основные свойства списков: 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