Рассмотрим пример, в котором с помощью уже знакомых элементов управления мы создадим автоматизированную книгу для формирования списка сотрудников для получения денежного вознаграждения. Начнем создание новой книги, и один из листов (рис. 2.20) будет содержать списки сотрудников различных филиалов (или различных подразделений). Фактически это достаточно статическая справочная информация, которая время от времени корректируется (производится добавление и удалите сведений непосредственно в ячейках рабочего листа). Эти данные будут использоваться далее па первом листе, который назовем Начисления (рис. 2.21).

Рис. 2.20. Списки сотрудников филиалов
В верхней части листа Начисления расположены три переключателя для выбора одного из филиалов. Далее, правее — поле со списком и три кнопки. Значения свойства Name всех перечисленных элементов управления указаны в табл. 2.1.
| Тип элемента управления | Name | Caption |
|---|---|---|
| Переключатель | Op1 | Филиал 1 |
| Переключатель | Op2 | Филиал 2 |
| Переключатель | Op3 | Филиал 3 |
| Кнопка | VKL | Включить |
| Кнопка | CLR | Очистка |
| Кнопка | Prn | Печать |
| Поле со списком | SPK |
Поясним, в чем заключается функционирование книги. Цель достаточно простая — заполнить необходимыми данными столбцы В, С и D. А именно: заполнить выборочный список сотрудников с указанием денежного вознаграждения. Для этого предназначено поле со списком и кнопка Включить.

Рис. 2.21. Оформление листа Начисления
В поле со списком заносятся фамилии сотрудников одного из филиалов, что производится с помощью щелчка на одном из переключателей в верхней части листа. В листинге 2.28 приведена процедура, которая выполняется по щелчку на переключателе с подписью Филиал 1. Здесь поле со списком сначала очищается, а затем заполняется данными из первого столбца второго листа.
1 2 3 4 5 6 7 8 9 10 11 | ' Листинг 2.28. Обработка щелчка на переключателе Филиал 1 Private Sub Op1_Click() N = 0 While Worksheets(2).Cells(N + 2, 1).Value <> "" N = N + 1 Wend Spk.Clear For i = 1 To N Spk.AddItem Worksheets(2).Cells(i + 1, 1).Value Next End Sub |
Процедуры, выполняемые по щелчкам на других переключателях (Филиал 2 и Филиал 3), представлены в листинге 2.29.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | ' Листинг 2.29. Обработка щелчков на переключателях Филиал 2 и Филиал 3 Private Sub Op2_Click() N = 0 While Worksheets(2).Cells(N + 2, 2).Value <> "" N = N + 1 Wend Spk.Clear For i = 1 To N Spk.AddItem Worksheets(2).Cells(i + 1, 2).Value Next End Sub Private Sub Op3_Click() N = 0 While Worksheets(2).Cells(N + 2, 3).Value <> "" N = N + 1 Wend Spk.Clear For i = 1 To N Spk.AddItem Worksheets(2).Cells(i + 1, 3).Value Next End Sub |
Теперь, после того как поле со списком включает сотрудников выбранного филиала, пользователь должен указать необходимую фамилию и затем щелчком на кнопке Включить добавить ее в перечень (столбец С) на листе Начисления (рис. 2.22). Процедура, которая для этого потребуется, приведена в листинге 2.30.
1 2 3 4 5 6 7 8 9 | ' Листинг 2.30. Обработка щелчка на кнопке Включить Private Sub Vk1_Click() N = 0 While Cells(N + 8, 2).Value <> "" N = N + 1 Wend Cells(N + 8, 2).Value = N + 1 Cells(N + 8, 3).Value = Spk.Text End Sub |
Теперь необходимо разработать процедуру (листинг 2.31) заполнения листа Печать, где информация приведена без лишних элементов управления. В ней для формирования необходимых границ мы воспользовались коллекцией Borders. На рис. 2.23 приведен один из вариантов ее заполнения.

Рис. 2.22. Внесение фамилий и начисленных сумм
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 | ' Листинг 2.31. Процедура, выполняемая по щелчку на кнопке Печать Private Sub Prn_Click() ' Подсчет числа строк с фамилиями на 3-м листе N = 0 While Worksheets(3).Cells(N + 5, 3).Value <> "" N = N + 1 Wend ' Очистка информации с удалением границ For i = 1 To N For j = 1 To 3 Worksheets(3).Cells(4 + i, j + 1).Value = "" Worksheets(3).Cells(4 + i, j + 1).Borders.LineStyle = xlNone Next Next ' Подсчет числа строк с фамилиями на 1-м листе N1 = 0 While Cells(N1 + 8, 3).Value <> "" N1 = N1 + 1 Wend ' Цикл для заполнения 3-го листа For i = 1 To N1 Worksheets(3).Cells(4 + i, 2).Value = i Worksheets(3).Cells(4 + i, 3).Value = Cells(i + 7, 3) Worksheets(3).Cells(4 + i, 4).Value = Cells(i + 7, 4) ' Оформление ячеек границей For j = 1 To 3 Worksheets(3).Cells(4 + i, j + 1).Borders.LineStyle = xlContinuous Next Next Worksheets(3).Activate End Sub |

Рис. 2.23. Оформление листа Печать
Теперь осталась только процедура, выполняемая по щелчку на кнопке Очистка. Она приведена в листинге 2.32. Разработка готова, и вы можете проверить ее работоспособность.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ' Листинг 2.32. Процедура, выполняемая по щелчку на кнопке Очистка Private Sub Clr_Click() N = 0 While Cells(N + 8, 2).Value <> "" N = N + 1 Wend ' Очистка данных на текущем листе Range(Cells(8, 2), Cells(8 + N, 4)) = "" ' Подсчет заполненных ячеек на третьем листе N = 0 While Worksheets(3).Cells(N + 5, 3).Value <> "" N = N + 1 Wend ' Очистка ячеек на третьем листе For i = 1 To N For j = 1 To 3 Worksheets(3).Cells(4 + i, j + 1).Value = "" Worksheets(3).Cells(4 + i, j + 1).Borders.LineStyle = xlNone Next Next End Sub |
Создаем форму в VBA Excel для учета поступлений и продаж
Как создать в VBA Excel приложение для составления заявки на канцелярские товары для офиса
Учреждение совета по контролю за изменениями проекта
Четыре возможных способа использования Excel для отображения календарного плана проекта
Стоимость качества проекта и виды затрат, связанных со стоимостью качества
Как обеспечить вывод значений выпадающего списка с двоеточием, как в бухгалтерских программах?
Как при помощи инструментов Excel решить задачу о коробке максимального объема
Построение графика функции одной переменной средствами Excel
Как правильно вводить, редактировать и копировать формулы в таблицах Excel
Как в Excel обойтись без подстановки шрифтов при применении малых кеглей