Таким образом, открывая книгу, мы отображаем форму и не даем пользователю доступ к листу, закрывая форму, мы закрываем и книгу, что, опять же, не дает пользователю возможности вручную редактировать данные. Эти ограничения можно обойти. Например, в ходе разработки этой программы вам понадобится править ее код, анализировать таблицу с данными. Поэтому, если вы нажмете сочетание клавиш Ctrl+Pause Break - выполнение программы остановится, вы сможете редактировать код, вручную работать с таблицей.
Если вы будете создавать подобный проект для практических целей - возможно, для того, чтобы максимально усложнить доступ пользователя к данным, есть смысл зашифровать их. К сожалению, парольная защита проектов в MS Office встроенными средствами не слишком эффективна, поэтому вы либо должны быть готовы к потенциальному несанкционированному доступу, либо должны предусмотреть дополнительные меры безопасности. Хотя, надо отметить, что практически любую систему безопасности можно либо обойти, либо взломать.
Теперь давайте рассмотрим код элементов управления формы frm_In.
Код формы 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 (html, txt)
Рассмотрим код формы frm_Out
Код формы frm_Out
Листинг 17.4 содержит код формы frm_Out. Обратите внимание на пользовательскую процедуру Load_Data(). Мы передаем ей параметр num_Index - номер строки, который должен быть отображен. Работа обработчиков нажатия на кнопки перемещения и обработчика, выполняющегося при выборе даты на календаре сводится к вычислению нужного номера строки и вызову этой процедуры.