Книга: Офисное программирование
7.2. Использование возможностей VBA при непосредственных расчетах
Разделы на этой странице:
7.2. Использование возможностей VBA при непосредственных расчетах
Создание VBA-программ
Пример 47. Дан табличный документ указанного ниже вида. Необходимо:
1) создать шаблонную часть этого документа с помощью табличного процессора Excel;
2) составить программу на языке VBA, которая будет запрашивать у пользователя исходные данные для заполнения этой таблицы, производить необходимые расчеты и помещать все данные в соответствующие ячейки, предусмотренные в шаблоне.
Отклонение фактического уровня издержек обращения от плана за месяц _________________ 20__ г.
Звездочкой (*) помечены те графы таблицы, по которым необходимо подвести итог.
Технология выполнения
Анализ таблицы показывает, что вид деятельности, прогноз прибыли и фактическая прибыль являются исходными данными, отклонение (в процентах и в сумме) – расчетными. Кроме того, рассчитываются итоги по некоторым графам таблицы.
Создание шаблона табличного документа
Шаблон создается на обычном рабочем листе в Excel. При этом необходимо только зарезервировать свободные ячейки для занесения следующих данных: месяц, год, потребительское общество, сумма издержек, товарооборот, уровень издержек. Поскольку заранее неизвестно количество потребительских обществ, то ячейки для итогов и ФИО экономиста заранее не резервируются. Рабочий лист переименован в Отчет. Реализация такого шаблона представлена на рис. 96.
Рис. 96. Шаблон-заготовка табличного документа
На этом рисунке желтым цветом обозначены те ячейки, которые во время работы программы будут заполняться исходными и расчетными данными.
Математическая модель решения задачи
Кроме организации ввода исходных данных и вывода их в некоторые ячейки электронной таблицы, программа должна производить расчет отклонений и итоговых значений по графам «Сумма издержек – план», «Сумма издержек – факт», «Товарооборот – план», «Товарооборот – факт», «Уровень издержек – план», «Уровень издержек – факт», «Отклонение по уровню». Для расчетных величин используем следующие переменные:
Nomer – номер текущей строки таблицы;
SP – планируемая сумма издержек;
SF – фактическая сумма издержек;
TP – планируемый товарооборот;
TF – фактический товарооборот;
IP – планируемый уровень издержек;
EF – фактический уровень издержек;
ItogSP – накопление итога по столбцу «планируемая сумма издержек»;
ItogSF – накопление итога по столбцу «фактическая сумма издержек»;
ItogTP – накопление итога по столбцу «планируемый товарооборот»;
ItogTF – накопление итога по столбцу «фактический товарооборот»;
ItogIP – накопление итога по столбцу «планируемый уровень издержек»;
ItogEF – накопление итога по столбцу «фактический уровень издержек».
С учетом введенных обозначений расчетные формулы будут иметь следующий вид:
1) для отклонений:
[Отклонение в %] = (F – P) / P * 100
[Отклонение в сумме] = F – P
Результаты этих вычислений можно не сохранять в отдельных переменных, так как они сразу могут быть занесены в соответствующие ячейки электронной таблицы;
2) для итогов по прогнозу и факту:
ItogP = ItogP + P
ItogF = ItogF + F
Эти формулы реализуют алгоритм получения итоговой суммы методом накопления, когда величина прогноза (факта), соответствующая очередному виду деятельности, добавляется к сумме соответствующих величин по уже рассмотренным видам деятельности. Назовем эти суммы промежуточными. Когда будут обработаны все виды деятельности, промежуточные суммы превратятся в окончательные – итоговые. В начале этого процесса (до того, как будет рассчитываться первая промежуточная сумма) переменные ItogP и ItogF равны нулю;
3) для итогов по отклонениям:
[итоговое отклонение в процентах] = (ItogF – ItogP) / ItogP * 100
[итоговое отклонение в сумме] = ItogF – ItogP
Результаты этих вычислений можно не сохранять в отдельных переменных, так как они сразу могут быть занесены в соответствующие ячейки электронной таблицы.
Разработка интерфейса пользователя
Каждому текстовому полю поменяем стандартное имя (TextBox) на более понятное (рис. 97). В нашем примере:
TextBox1 – MesTextBox – ввод месяца;
TextBox2 – YearTextBox – ввод года;
TextBox3 – FIOTextBox – ввод фамилии, имени и отчества экономиста;
TextBox4 – POTextBox – ввод названия потребительского общества;
TextBox5 – SPTextBox – планируемая сумма издержек;
TextBox6 – SFTextBox – фактическая сумма издержек;
TextBox7 – TPTextBox – планируемый товарооборот;
TextBox8 – TFTextBox – фактический товарооборот;
TextBox9 – IPTextBox – планируемый уровень издержек;
TextBox10 – EFTextBox – фактический уровень издержек.
Рис. 97. Разработанная форма примера 47 в рабочем состоянии
Программа на языке VBA
' Объявление переменных и констант
Const StrNomer = 7 'количество строк для заголовка таблицы
Dim Nomer As Long 'номер очередной строки таблицы (потребительское общество)
Dim SP As Long
Dim SF As Long
Dim TP As Long
Dim TF As Long
Dim IP As Long
Dim EF As Long
Dim ItogSP As Long
Dim ItogSF As Long
Dim ItogTP As Long
Dim ItogTF As Long
Dim ItogIP As Long
Dim ItogEF As Long
Dim StrName1 As String
Dim StrName2 As String
'Процедура инициализации формы
Private Sub UserForm_Initialize()
Worksheets(«Отчет»).Activate
MesTextBox.SetFocus
End Sub
'Процедура считывания заголовочных данных и вывода их в ячейки электронной таблицы Private Sub CommandButton3_Click()
'Ввод данных для новой отчетной таблицы
With ActiveSheet
Range(«E3»).Value = MesTextBox.Text
Range(«G3»).Value = YearTextBox.Text
End With
ActiveWorkbook.SaveAs ("Отклонение фактического уровня издержек обращения от плана за " + MesTextBox.Text + «месяц. xls»)
Nomer = 1
ItogSP = 0
ItogSF = 0
ItogTP = 0
ItogTF = 0
ItogIP = 0
ItogEF = 0
End Sub
' Процедура обработки данных по видам деятельности
Private Sub CommandButton2_Click()
StrName1 = Trim(Str(StrNomer + Nomer))
With ActiveSheet
Range("A" + StrName1).Value = Nomer
Range("B" + StrName1).Value = POTextBox.Text
SP = Val(SPTextBox.Text)
Range("C" + StrName1).Value = SP
ItogSP = ItogSP + SP
SF = Val(SFTextBox.Text)
Range("D" + StrName1).Value = SF
ItogSF = ItogSF + SF
TP = Val(TPTextBox.Text)
Range("E" + StrName1).Value = TP
ItogTP = ItogTP + TP
TF = Val(TFTextBox.Text)
Range("F" + StrName1).Value = TF
ItogTF = ItogTF + TF
IP = Val(IPTextBox.Text)
Range("G" + StrName1).Value = IP
ItogIP = ItogIP + IP
EF = Val(EFTextBox.Text)
Range("H" + StrName1).Value = EF
ItogEF = ItogEF + EF
Range("I" + StrName1).Value = EF – IP
'Выполнение автозаполнения с текущей строки таблицы на следующую строку
StrName2 = Trim(Str(StrNomer + Nomer + 1))
Set Range1 =.Range("A" + StrName1 +":I" + StrName1)
Set Range2 =.Range("A" + StrName1 +":I" + StrName2)
Range1.AutoFill Destination:=Range2
Range("A" + StrName2 +":I" + StrName2).ClearContents
End With
'Очистка полей формы для ввода очередных данных
POTextBox.Text = ""
SPTextBox.Text = ""
SFTextBox.Text = ""
TPTextBox.Text = ""
TFTextBox.Text = ""
IPTextBox.Text = ""
EFTextBox.Text = ""
POTextBox.SetFocus
Nomer = Nomer + 1
End Sub
'Закрытие формы, подведение итогов и вывод фамилии экономиста
Private Sub CommandButton1_Click()
UserForm1.Hide
StrName1 = Trim(Str(StrNomer + Nomer))
With ActiveSheet
Range("A" + StrName1).Value = «Итого:»
Range("C" + StrName1).Value = ItogSP
Range("D" + StrName1).Value = ItogSF
Range("E" + StrName1).Value = ItogTP
Range("F" + StrName1).Value = ItogTF
Range("G" + StrName1).Value = ItogIP
Range("H" + StrName1).Value = ItogEF
Range("I" + StrName1).Value = ItogEF – ItogIP
StrName2 = Trim(Str(StrNomer + Nomer + 2))
Range("A" + StrName2).Value = «Экономист:»
Range("G" + StrName2).Value = FIOTextBox.Text
End With
End Sub
Использование программы в режиме выполнения и получения результатов
Перед запуском программы сохраним рабочую книгу под именем отчет1.xls.
Кнопку «Создать отчетную таблицу» следует нажимать один раз после ввода заголовочной информации, кнопка «Добавить строку» нажимается каждый раз после ввода данных по очередному виду деятельности. После ввода всех данных необходимо нажать кнопку «Закончить», а затем переключиться в окно Microsoft Excel. На рабочем листе появится результат, аналогичный рис. 98.
Задачи на закрепление материала
Пример 48. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных по обслуживанию населения некоторой организацией за определенный период времени. Кроме этого, программа должна вычислять данные по столбцам, отмеченным звездочками. Вывод данных предусмотреть на лист Excel.
Рис. 98. Шаблон табличного документа, заполненный данными
Пример 49. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных по расчету товарного баланса некоторой организацией, занимающейся торговлей, за определенный период времени. Кроме этого, программа должна вычислять данные по столбцам, отмеченным звездочками. Вывод данных предусмотреть на лист excel.
Пример 50. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных на отпуск товара с некоторого склада и формирует счет-фактуру за определенный период времени. Кроме этого, программа должна вычислять данные по столбцам, отмеченным звездочками. Вывод данных предусмотреть на лист excel.
Пример 51. Создать программу, которая по введенным в соответствующие текстовые поля формы данным автоматизирует ввод данных на студентов определенной специальности. Данные выводятся на рабочий лист excel. Предусмотреть на листе excel кнопку, которая вызывает необходимую форму для пользователя, не загружая редактор vba.
Технология выполнения
1. Сохраните новый документ Excel.
2. Создайте форму приложения, отвечающую требованиям задачи (см. рис. 99а).
3. Пропишите процедуры обработки нажатия кнопок Создать отчетную таблицу, Добавить строку и Закончить (см. пример 47).
4. При выводе информации на рабочий лист Excel придерживайтесь оформления, предложенного на рис. 99б.
Рис. 99а. Разработанная форма примера 51 в рабочем состоянии
Рис. 99б. Вывод информации на лист excel после нажатия кнопки «Закончить»
5. Произведем резентацию формы, т. е. создадим кнопку запуска формы непосредственно на листе Excel, так как запускать форму на выполнение каждый раз из редактора VBA не очень красиво и неудобно для пользователя. Для простоты использования формы поступим следующим образом: установим на рабочем листе Excel со списком группы кнопку «Диалог», нажатие которой будет приводить к появлению разработанной формы (диалогового окна). Для этого:
1) выберите в главном меню Microsoft Excel <Сервис> <Макрос><Макросы…>;
2) укажите имя макроса, например Макрос1, и нажмите <Создать>. После этого загрузится редактор VBA с заготовкой
Sub Макрос1()
End Sub
3) вставьте в эту заготовку оператор UserForm1.Show, активизирующий созданную форму;
4) далее выберите в главном меню книги Excel <Вид><Панели инструментов><Формы>. Появится панель с элементами управления. Выберите <Кнопка>, после чего можно нарисовать кнопку на рабочем листе Excel;
5) после этого сразу появляется диалоговое окно «Назначить макрос объекту». Выберите Макрос1;
6) чтобы название кнопки было более содержательным, щелкните на ней правой клавишей мыши. В появившемся рядом меню выберите <Изменить текст>. После этого установите текст «Диалог».
Теперь при нажатии кнопки «Диалог» на рабочем листе появится разработанное диалоговое окно примера.
- Восстановление с использованием инструмента gbak
- Типы страниц и их использование
- Использование констант
- Использование переменной окружения ISC_PATH
- Использование сервера Yaffil внутри процесса
- Использование CAST() с типами дата
- Использование типов содержимого и столбцов
- 24.1. Расширение возможностей Панели задач
- Вызов хранимых процедур InterBase с использованием стандартного синтаксиса ODBC
- Использование кнопки Автосумма
- 24.7. Использование программы-твикера
- Использование отдельных процессоров XSLT