Лекции.Орг


Поиск:




Категории:

Астрономия
Биология
География
Другие языки
Интернет
Информатика
История
Культура
Литература
Логика
Математика
Медицина
Механика
Охрана труда
Педагогика
Политика
Право
Психология
Религия
Риторика
Социология
Спорт
Строительство
Технология
Транспорт
Физика
Философия
Финансы
Химия
Экология
Экономика
Электроника

 

 

 

 


Листинг 17.2. Код обработчика события Open для рабочей книги (html, txt)




Таким образом, открывая книгу, мы отображаем форму и не даем пользователю доступ к листу, закрывая форму, мы закрываем и книгу, что, опять же, не дает пользователю возможности вручную редактировать данные. Эти ограничения можно обойти. Например, в ходе разработки этой программы вам понадобится править ее код, анализировать таблицу с данными. Поэтому, если вы нажмете сочетание клавиш 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 - номер строки, который должен быть отображен. Работа обработчиков нажатия на кнопки перемещения и обработчика, выполняющегося при выборе даты на календаре сводится к вычислению нужного номера строки и вызову этой процедуры.

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





Поделиться с друзьями:


Дата добавления: 2016-09-06; Мы поможем в написании ваших работ!; просмотров: 358 | Нарушение авторских прав


Поиск на сайте:

Лучшие изречения:

Начинайте делать все, что вы можете сделать – и даже то, о чем можете хотя бы мечтать. В смелости гений, сила и магия. © Иоганн Вольфганг Гете
==> читать все изречения...

2335 - | 2134 -


© 2015-2025 lektsii.org - Контакты - Последнее добавление

Ген: 0.012 с.