О стоимости курса |
Опубликован: 25.03.2009 | Уровень: для всех | Доступ: свободно
Лекция 17:
Практика MS Excel
17.1.5. Код формы frm_In
Листинг 17.3 содержит код формы frm_In.
Private Sub cmd_Exit_Click() frm_In.Hide 'Скрывая frm_In мы автоматически 'переходим к frm_Main End Sub Private Sub cmd_Rec_Click() 'Адрес строки для записи Dim num_Address 'Вычисляем номер строки для записи num_Address = ActiveSheet.Range("B1") + _ ActiveSheet.Range("B2") 'Записываем номер в первую ячейку строки ActiveSheet.Cells(num_Address, 1) = _ ActiveSheet.Range("B1") 'Запишем дату во вторую ячейку ActiveSheet.Cells(num_Address, 2) = _ Date 'В третьей ячейке - тип операции ActiveSheet.Cells(num_Address, 3) = _ cbo_Type.Value 'В четвертой - сумма ActiveSheet.Cells(num_Address, 4) = _ Val(txt_Sum) 'В пятой - примечание ActiveSheet.Cells(num_Address, 5) = _ txt_Info 'Запишем новый номер строки ActiveSheet.Range("B1") = _ ActiveSheet.Range("B1") + 1 'Сбросим все установки на форме Initial End Sub Private Sub UserForm_Activate() 'При активации формы 'инициализируем элементы управления Initial End Sub Sub Initial() 'Инициализация элементов управления lbl_Date = Date lbl_RecNum = ActiveSheet.Range("B1") cbo_Type.Clear cbo_Type.AddItem "Доход" cbo_Type.AddItem "Расход" cbo_Type.Value = "Доход" txt_Info = "" txt_Sum = "" End SubЛистинг 17.3. Код формы frm_In
Рассмотрим код формы frm_Out
17.1.6. Код формы frm_Out
Листинг 17.4 содержит код формы frm_Out. Обратите внимание на пользовательскую процедуру Load_Data(). Мы передаем ей параметр num_Index - номер строки, который должен быть отображен. Работа обработчиков нажатия на кнопки перемещения и обработчика, выполняющегося при выборе даты на календаре сводится к вычислению нужного номера строки и вызову этой процедуры.
Private Sub UserForm_Initialize() 'Загружаем первую строку Load_Data (1) End Sub Private Sub cmd_Backward_Click() 'Предыдущая строка If Val(lbl_RecNum) > 1 Then Load_Data (Val(lbl_RecNum) - 1) End If End Sub Private Sub cmd_Exit_Click() frm_Out.Hide End Sub Private Sub cmd_First_Click() 'Загружаем первую строку Load_Data (1) End Sub Private Sub cmd_Forward_Click() 'Следующая строка If Val(lbl_RecNum) < ActiveSheet.Range("B1") Then Load_Data (Val(lbl_RecNum) + 1) End If End Sub Private Sub cmd_Last_Click() 'Загружаем последнюю строку Load_Data (ActiveSheet.Range("B1") - 1) End Sub Private Sub cld_First_Click() 'Просматриваем таблицу, 'находим первую запись 'за выбранную дату и выводим эту запись For i = 1 To ActiveSheet.Range("B1") - 1 If ActiveSheet.Cells _ (i + ActiveSheet.Range("B2"), 2) = _ cld_First.Value Then Load_Data (i) Exit For End If Next i End Sub Private Sub cmd_Rec_Click() 'Адрес строки для записи Dim num_Address 'Вычисляем номер строки для записи num_Address = Val(lbl_RecNum + _ ActiveSheet.Range("B2")) 'Так как мы разрешили модифицировать 'лишь сумму и примечание - запишем их 'в текущую строку 'Запишем сумму ActiveSheet.Cells(num_Address, 4) = _ Val(txt_Sum) 'Запишем примечание ActiveSheet.Cells(num_Address, 5) = _ txt_Info End Sub Sub Load_Data(num_Index As Integer) 'Принимает номер строки и выводит 'Данные из этой строки 'Адрес строки для чтения Dim num_Address 'Вычисляем номер строки для чтения num_Address = num_Index + _ ActiveSheet.Range("B2") 'Выводим номер записи lbl_RecNum = _ ActiveSheet.Cells(num_Address, 1) 'Выводим дату lbl_Date = _ ActiveSheet.Cells(num_Address, 2) 'Выводим тип операции lbl_Type = _ ActiveSheet.Cells(num_Address, 3) 'Выводим сумму txt_Sum = _ ActiveSheet.Cells(num_Address, 4) 'Выводим примечание txt_Info = _ ActiveSheet.Cells(num_Address, 5) End SubЛистинг 17.4. Код формы frm_Out
Теперь рассмотрим код модуля формы frm_Balance
17.1.7. Код формы frm_Balance
В листинге 17.5. вы можете найти код модуля формы frm_Balance. Здесь мы вычисляем баланс доходов и расходов по всей таблице. Вычисления ведутся в коде обработчика события Activate.
Private Sub cmd_OK_Click() frm_Balance.Hide End Sub Private Sub UserForm_Activate() 'Адрес строки Dim num_Address 'Переменная для хранения суммы доходов Dim num_Earn 'Переменная для хранения суммы расходов Dim num_Spend For i = 1 To ActiveSheet.Range("B1") - 1 num_Address = i + ActiveSheet.Range("B2") 'Если в строке хранится значение дохода 'добавим его в num_Earn If ActiveSheet.Cells(num_Address, 3) = "Доход" _ Then num_Earn = num_Earn + _ ActiveSheet.Cells(num_Address, 4) End If 'Если в строке хранится значение расхода 'добавим его в num_Spend If ActiveSheet.Cells(num_Address, 3) = "Расход" _ Then num_Spend = num_Spend + _ ActiveSheet.Cells(num_Address, 4) End If Next i lbl_Balance = num_Earn - num_Spend If num_Earn > num_Spend Then _ lbl_Msg = "Доходы больше расходов." If num_Earn = num_Spend Then _ lbl_Msg = "Доходы равны расходам." If num_Earn < num_Spend Then _ lbl_Msg = "Доходы меньше расходов." End SubЛистинг 17.5. Код формы frm_Balance