- •Кафедра учета, анализа и аудита
- •«Компьютерные системы и сети»
- •Часть 2. Программирование на vba
- •Введение
- •Тема № 1 создание пользовательских функций
- •Тема № 2 пользовательские процедуры
- •Тема 2.1 Ввод записей в базу данных
- •Тема 2.2 Поиск уникальной записи по указанным критериям
- •Тема 2.3 Расчет итоговых показателей по всем и группе записей.
- •Тема 2.4 Поиск записей согласно критериям.
- •Тема № 3 отладка программ и обработка ошибок
- •Тема № 4 проектирование пользовательских форм для ввода-вывода информации
- •Тема 4.1 Использование формы в процедуре Auto_Open
- •Тема 4.2 Ввод новой записи в форме, обработка записей
- •Тема № 5 проектирование системного меню и справочной информации
- •Приложение
- •Оглавление
Тема 4.2 Ввод новой записи в форме, обработка записей
Первый пример иллюстрирует возможность дополнения записей в форме с ручным вводом значений всех полей с клавиатуры.
Дополним исходную таблицу двумя полями: ПолиДата поступления на работу.
В редакторе VBAотобразим окно проекта и окно свойств (View/ProjectExplorerиView/PropertiesWindow), создадим пользовательскую форму (Insert/Userform), введем в нее элементы управления – пять надписей (Label), пять полей ввода (TextBox), две кнопки (CommandButton). Изменим свойства объекта форма – заголовок (Caption), шрифт (Font).
Добавим в проект Модуль (Insert/Module).
Процедура, активизирующая форму, содержит только одну команду
UserForm1.Show‘активизировать форму
Процедура, закрепленная за кнопкой Ввести
PrivateSubCommandButton1_Click() ‘личная процедура первой
командной кнопки формы
i= 1 ‘переменной, отвечающей за номер строки, присваиваем значение 1
WhileCells(i, 1) <>Empty‘цикл, до тех пор, пока в ячейкеiстроки и первого столбца не будет пусто
i=i+ 1 ‘увеличить номер анализируемой строки на 1
Wend‘закончить цикл
WithUserForm1 ‘действия с объектами формы
Cells(i, 1) = .TextBox1.Text‘ячейке текущей строки и первого столбца присвоить значение первого текстового поля формы
Cells(i, 2) = .TextBox2.Text
Cells(i, 3) = .TextBox3.Text
Cells(i, 4) = .TextBox4.Text
Cells(i, 5) = .TextBox5.Text
.Hide‘удалить форму с экрана
End With ‘закончить действия с формой
End Sub ‘конец процедуры
Рис. 4
Процедура, закрепленная за кнопкой Отмена
Private Sub CommandButton2_Click()
UserForm1.Hide
End Sub
Второй пример показывает преимущества использования различных элементов управления в форме, освобождающих пользователя от ручного ввода данных с клавиатуры.
Для этого создадим форму (рис. 5), в которой для ввода пола сотрудника используем переключатели (OptionBytton), для ввода должности – поле со списком (ComboBox), оклада – счетчик и поле ввода (SpinButtonиTextBox). Для удобства пользователя в качестве даты, заданной по умолчанию, примем текущую дату.
Рис. 5
Sub ввод_форма()
With UserForm2
.TextBox2 =Date‘второму полю ввода присвоить значение текущей даты
‘Второй лист содержит справочник должностей, заполняющий поле ‘ввода со списком
i= 1
WhileSheets("Лист2").Cells(i, 1) <>Empty‘
.ComboBox1.AddItem Sheets("Лист2").Cells(i, 1)
i = i + 1
Wend
.Show
End With
End Sub
‘Процедура очищает элементы управления формы или присваивает ‘им первоначальные значения для дальнейшего ввода
Sub clear_form()
With UserForm2
.TextBox1 =Empty‘очищается поле с фамилией
.OptionButton1.Value=True‘включается первая опция
.TextBox2 =Date‘устанавливается текущая дата
.TextBox3 = 1000 ‘первоначальное значение оклада присваивается полю ввода
.ComboBox1.ListIndex= 0 ‘в списке активизируется первый элемент
.SpinButton1.Value= 1000 ‘первоначальное значение оклада присваивается счетчику
End With
End Sub
‘Процедура закреплена за кнопкой Ввести
Private Sub CommandButton1_Click()
‘осуществляется поиск первой пустая ячейки в первом столбце
‘текущего листа
i = 1
While Cells(i, 1) <> Empty
i = i + 1
Wend
Cells(i, 1) =TextBox1
‘если включена первая опция, в ячейку текущей строки второго ‘столбца записывается “м”, в противном случае “ж”.
If OptionButton1.Value = True Then
Cells(i, 2) = "м"
Else
Cells(i, 2) = "ж"
End If
Cells(i, 3) = TextBox2.Text
Cells(i, 4) = ComboBox1.Text
Cells(i, 5) = TextBox3.Text
clear_form
End Sub
Процедура, закрепленная за кнопкой Отмена
PrivateSubCommandButton2_Click()
UserForm2.Hide
End Sub
Две ниже представленные процедуры позволяют «связать между собой» поле ввода, отражающее оклад, и счетчик.
Private Sub SpinButton1_Change()
TextBox3.Text = SpinButton1.Value
End Sub
Private Sub TextBox3_Change()
SpinButton1 = CCur(TextBox3.Text)
End Sub
Задание № 9. Создать программы по вводу новой записи и обработке с использованием пользовательских форм и различных элементов управления (см. табл. 5 и 6).
Задание № 10. Создать процедуру по поиску записей по символьному полю. Вывод найденных записей осуществить в пользовательской форме с возможностью перехода по записям вперед и назад.
Задание № 11. Создать процедуру по поиску записей из диапазона дат. Начальная и конечная даты вводятся на разных страницах формы, для ввода дня и года использовать счетчик, для ввода месяца – список (рис. 6). (* Предусмотреть проверку правильности ввода дат*).
Рис. 6
Задачи для самостоятельной работы приведены в прил. 1. В них необходимо разработать алгоритм решения задачи и создать процедуры, позволяющие заполнять часть рабочего листа Excelсогласно таблице. Исходным данным является размер квадратной заполняемой областиn, вводимой с помощью счетчика в пользовательской форме.