КАТЕГОРИИ:
АстрономияБиологияГеографияДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРиторикаСоциологияСпортСтроительствоТехнологияФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Список из нескольких колонокПример 3. В рабочий лист Excel введен список сотрудников некоторой организации (столбец A) и их доходы (столбец B). Эти данные должны отображаться в списке, содержащемся в пользовательской форме (см. рисунок 5).
При щелчке по элементу списка (т.е. при выборе сотрудника) должен вычисляться налог и отображаться в текстовом поле “Налог” на форме. Кроме того, вычисленная величина должна выводиться в рабочий лист Excel в столбец C (рядом с доходом соответствующего работника). При нажатии на кнопку “Выход” форма должна закрываться. Для решения этой задачи требуется создать пользовательскую форму. Установить для нее свойства: Name = Nalogi, Caption = Расчет налогов. Требуется разместить на форме элементы управления и задать им свойства, как показано в таблице 1. Таблица 1 – Элементы управления для примера 3
Ввести следующую процедуру инициализации пользовательской формы: Private Sub userform_initialize() Set d = Range("A1").CurrentRegion With spisok_sotr .ColumnCount = 2 .RowSource = d.Address End With End Sub Здесь в операторе Set d = Range("A1").CurrentRegion переменная d связывается с диапазоном, заполненным данными (в данном примере – фамилиями сотрудников и их доходами). Оператор With используется для сокращения ссылок на объект (в данном случае – на список spisok_sotr); область его действия завершается строкой End With. В операторе .ColumnCount = 2 устанавливается свойство списка spisok_sotr, задающее количество его колонок (имя списка задано в операторе With). В операторе .RowSource = d.Address свойству списка RowSource, задающему источник данных для заполнения списка, присваивается адрес объекта d (т.е. диапазона с данными). Для обработки щелчка по элементу списка введем следующую процедуру: Private Sub spisok_sotr_Click() With spisok_sotr i = .ListIndex dohod = .List(i, 1) Call raschet_naloga(dohod, nalog) Pole_nalog.Value = nalog Cells(i + 1, 3).Value = nalog End With End Sub
Здесь в операторе i = .ListIndex переменной iприсваивается номер текущего элемента (точнее, текущей строки) списка spisok_sotr; следует обратить внимание, что строки (как и столбцы) списка нумеруются с нуля. В операторе dohod = .List(i, 1) переменной dohod присваивается величина из i-й строки и первого столбца списка spisok_sotr, т.е. величина дохода выбранного сотрудника. Следует еще раз обратить внимание, что столбцы списка нумеруются с нуля, т.е. в нулевом столбце находятся фамилии, а в первом – доходы. В операторе Call raschet_naloga(dohod, nalog) вызывается процедура, реализующая алгоритм расчета налога. Результатом ее выполнения является переменная dohod. В двух следующих операторах эта величина выводится в текстовое поле пользовательской формы и в рабочий лист Excel. Процедура расчета налога может быть, например, следующей: Sub raschet_naloga(ByVal summa_dohoda, summa_naloga) If summa_dohoda < 20000 Then summa_naloga = summa_dohoda * 0.09 Else summa_naloga = 20000 * 0.09 + (summa_dohoda - 20000) * 0.12 End If End Sub
Здесь обозначение ByVal указывает, что в переменную summa_dohoda передается только значение соответствующей переменной, указанной при вызове процедуры (в данном случае – переменной dohod). Тем самым исключается случайное изменение переменной dohod в процедуре. Следует обратить внимание, что обозначение ByVal относится только к переменной summa_dohoda; таким образом, изменение переменной summa_naloga вызывает изменение соответствующей переменной nalog в вызывающей процедуре. Приведем также процедуру для закрытия формы нажатием кнопки vyhod: Private Sub vyhod_Click() Unload Nalogi End Sub
|