| О стоимости курса |
Опубликован: 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
