- •Кафедра учета, анализа и аудита
- •«Компьютерные системы и сети»
- •Часть 2. Программирование на vba
- •Введение
- •Тема № 1 создание пользовательских функций
- •Тема № 2 пользовательские процедуры
- •Тема 2.1 Ввод записей в базу данных
- •Тема 2.2 Поиск уникальной записи по указанным критериям
- •Тема 2.3 Расчет итоговых показателей по всем и группе записей.
- •Тема 2.4 Поиск записей согласно критериям.
- •Тема № 3 отладка программ и обработка ошибок
- •Тема № 4 проектирование пользовательских форм для ввода-вывода информации
- •Тема 4.1 Использование формы в процедуре Auto_Open
- •Тема 4.2 Ввод новой записи в форме, обработка записей
- •Тема № 5 проектирование системного меню и справочной информации
- •Приложение
- •Оглавление
Тема № 2 пользовательские процедуры
Процедура - последовательность инструкций, выполняемых EXCEL.
Процедуры составляют большую часть кода VBA. При ее объявлении соблюдаются правила описания процедур. Упрощенный синтаксис является следующим:
Subимя([ аргументы ])
инструкции
EndSub
Следует обратить внимание на следующее:
ключевые слова SubиEndSubиспользуются в описании любой процедурыSub;
параметр имяопределяет имя создаваемой процедуры;
необязательный параметр [аргументы] позволяет передать в процедуру требуемые значения, многие процедуры параметров не требуют.
Тема 2.1 Ввод записей в базу данных
На рабочем листе создается таблица (база данных). Для этого вводятся названия столбцов (полей). С помощью процедуры предполагается дополнение имеющихся записей в первую пустую строку базы данных.
Пример 1.
Требуется создать программу по вводу новой записи в таблицу.
1 |
Фамилия |
Должность |
Оклад |
2 |
Иванов |
инженер |
1000 |
3 |
Петров |
бухгалтер |
900 |
4 |
. . . . . |
. . . . |
|
N |
Сидоров |
инженер |
1100 |
N+1 |
|
|
|
Алгоритм решения задачи и программа методом явного перехода по ячейкам (рис. 1).
Sub Ввод_1()
Dim q As Integer, prod as Variant
Range("A1").Select
ActiveCell.CurrentRegion.Select
q = Selection.Rows.Count
ActiveCell.Cells(q + 1, 1).Activate
m1: ActiveCell.Formula = InputBox(prompt:="Введите фамилию ")
ActiveCell.Offset(0, 1).Activate
ActiveCell.Formula = InputBox(prompt:="Введите должность")
ActiveCell.Cells(1, 2).Activate
ActiveCell.Formula = InputBox(prompt:="Введите оклад")
Prod = MsgBox("Продолжим ?", vbYesNo, "Ваши действия ?")
If Prod = vbYes Then
ActiveCell.Offset(1, -2).Activate
GoTo m1
End If
Range("A1").Select
End Sub
Алгоритм решения задачи (рис. 2) и программа методом ссылок на ячейки
Subввод_2 ()
i = 1
While Cells(i, 1) <> Empty
i = i + 1
Wend
prod = vbYes
While prod = vbYes
Cells(i, 1) =InputBox("Ведите фамилию сотрудника")
Cells(i, 2) = InputBox("Введите должность")
Cells(i, 3) = Val(InputBox("Введите оклад"))
prod = MsgBox("Продолжите ввод?", vbYesNo, "Выбор")
i = i + 1
Wend
End Sub
Тема 2.2 Поиск уникальной записи по указанным критериям
В процедуре осуществляется поиск уникальной записи по критериям, вводимым с клавиатуры. Найденная запись отражается в диалоговом окне, в случае отрицательного результата поиска выводится сообщение об этом. Стандартная функция Chr(13) позволяет продолжить вывод на новой строке диалогового окнаMsgBox.
В представленной ниже процедуре осуществляется поиск сотрудника по фамилии и должности, вводимым с клавиатуры. Принимается, что на предприятии отсутствуют однофамильцы, работающие на одной должности.
Sub qq1()
i = 1
fam=InputBox("Введите фамилию")
dol=InputBox("Введите должность")
While Cells(i, 1) <> Empty
If Cells(i, 1) = fam And Cells(i, 2) = dol Then
MsgBox "Фамилия - " + fam + Chr(13) + "Должность - " + dol + _
Chr(13) + "Оклад - " & Cells(i, 3)
Exit Sub
Else
i = i + 1
End If
Wend
MsgBox"Сотрудник не найден"
End Sub