logo
Информатика и КГ_2014

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 произойдет закрытие диалогового окна пользовательской формы и на экране останется листПлатеж.

После формирования листа Платеж его можно напечатать с помощью кнопки «Печать», которая может быть размещена на этом же листе вне ячеек с информацией:

Sub CommandButton3_Click()

Worksheets("Платеж").Range("a1:e18").PrintOut

End Sub

Естественно, что печать можно осуществлять в том случае, когда подключено печатное устройство.