- •230700 «Прикладная информатика»
- •Режим доступа к электронному аналогу печатного издания: http://www.Libdb.Sssu.Ru
- •Содержание
- •Предисловие
- •Пользовательские функции в vba Excel
- •Создание пользовательских функций в Excel
- •Варианты заданий для самостоятельного выполнения
- •Вопросы для обсуждения
- •Создание и обработка документов средствами vba Excel
- •Разработка макроса средствами vba Excel
- •Варианты заданий для выполнения работы
- •Вопросы для самоконтроля
- •Автоматизированное создание документов посредством слияния
- •Подготовка к слиянию
- •Создание рассылки писем
- •Создание конвертов
- •Создание наклеек
- •Вопросы для самоконтроля
- •Библиографический список
Разработка макроса средствами vba Excel
Макрос – действие или набор действий, используемые для автоматизации выполнения задач. Макросы записываются на языке программирования Visual Basic для приложений (VBA). В общих чертах программирование в VBA Excel похоже на работу с объектами в VBA Word. Среди объектов, которых в VBA Excel более сотни, наиболее востребованными могут оказаться следующие:
Приложение (Excel.Application) – объект, представляющий приложение Microsoft Excel, аналогичен объекту Word.Application.
Рабочая книга (Workbook) – представляет рабочую книгу – аналог документа Microsoft Word. Однако в Word происходит работа с данными, расположенными в документе, а в Excel на пути к данным есть ещё один объект – рабочий лист.
Рабочий лист (Worksheet) – книга в MS Excel разбита на рабочие листы. Именно на листе расположены ячейки, которые могут хранить информацию и формулы.
Диапазон (Range) – может быть представлен в виде одной ячейки или группы ячеек. Этот объект заменяет множество объектов для работы с элементами документов (character, word и т.д.), которые применяются в Microsoft Word. В результате работа с листом становится очень четкой и удобной – чтобы работать с какой–либо ячейкой, надо знать лишь ее имя или адрес (в формате A1 или R1C1).
Таблица запросов (QueryTable) – этот объект используют для импорта в Microsoft Excel информации из баз данных.
Сводная таблица (PivotTable) – это особый вид электронной таблицы Excel – она позволяет в интерактивном режиме обобщать и анализировать большие объёмы информации, в частности, взятой из базы данных.
Диаграмма (Chart) – объект представляет собой диаграмму. Обычно используется для визуализации данных.
Как следует из представленного перечня, одно из главных отличий от VBA Word (где основными «кирпичиками» являются абзацы, из которых состоит документ) заключается в том, что в Excel рабочая область листа разбита на ячейки.
Каждая ячейка по умолчанию имеет имя-ссылку. Стили именования ссылок могут быть двух видов:
Стиль A1 – ссылка состоит из буквенного имени столбца и номера строки. Например, A1 – ячейка, находящаяся на пересечении столбца А (первого левого) и первой (верхней) строки.
Стиль R1C1 – для адресации ячейки указывают номер строки (R – от англ. Row – строка) и номер столбца (C – Column – столбец), на пересечении которых расположена ячейка. Например, R2C3 – адрес ячейки, находящийся на пересечении второй строки и третьего столбца, то есть – в переложении на стиль A1 – получим ячейку С2.
Рассмотрим пример разработки макроса, позволяющего автоматически заполнять таблицу в Microsoft Office Excel по заданной форме, представленной на рисунке 2.1, на основе исходных данных из текстового файла (рис. 2.2).
Рис. 2.6. Форма создаваемой таблицы
Рис. 2.7. Исходные данные в файле proba.txt
Начнём с создания заголовочной части таблицы на рабочем листе. Для этого сначала следует выбрать на ленте вкладку Разработчик, в группе Код – команду Запись макроса, которая заменяется командой Остановить запись. В появившемся окне можно задать имя записываемого макроса, сочетание клавиш для быстрого вызова, место его хранения и короткое описание, после чего нажать Ок (Рисунок 2.3).
Рис. 2.8. Окно для задания параметров записываемого макроса
Убедившись, что «шапка» таблицы соответствует заданной форме, следует выбрать команду Остановить запись. Во время записи вся последовательность действий разработчика по изменению документа автоматически записывается в создаваемый макрос, представляющий собой программный модуль VBA. Выполнение этого макроса позволяет автоматически повторить все записанные действия.
Теперь можно изменить записанный макрос так, чтобы он формировал не только шапку, но ещё и оставшуюся часть таблицы по заданному алгоритму, заполняя её исходными и расчётными данными. Приведём ниже модифицированный код программного модуля, созданного после записи макроса, дополненного процедурами формирования содержательной части таблицы (Расчёт) и загрузки данных из текстового файла (база):
Rem установка опций программы и объявление глобальных переменных – задаётся вручную после записи макроса
Option Explicit
Option Base 1
Public Count_Str As Integer
Public Ind_str As Integer
Public FIO() As String
Public начислено() As Double
Public удержано() As Double
Sub макрос1()' процедура, сформированная по команде Запись макроса, она оформляет шапку таблицы
Range("A1").Select
Selection.Merge
Range("A1:E1").Select
ActiveCell.FormulaR1C1 = "Платежная ведомость за август 2010 года"
Range("A2").Select
ActiveCell.FormulaR1C1 = "№"
Range("B2").Select
ActiveCell.FormulaR1C1 = "Ф.И.О."
Range("C2").Select
ActiveCell.FormulaR1C1 = "Начислено"
Range("D2").Select
ActiveCell.FormulaR1C1 = "Удержано"
Range("E2").Select
ActiveCell.FormulaR1C1 = "К выдаче"
Range("F2").Select
ActiveCell.FormulaR1C1 = "Роспись"
Range("A2:F2").Select
With Selection
.HorizontalAlignment = xlGeneral
.VerticalAlignment = xlBottom
.WrapText = True
.Orientation = 0
.AddIndent = False
.IndentLevel = 0
.ShrinkToFit = False
.ReadingOrder = xlContext
.MergeCells = False
End With
Range("A3").Select
ActiveCell.FormulaR1C1 = "1"
Range("B3").Select
ActiveCell.FormulaR1C1 = "2"
Range("C3").Select
ActiveCell.FormulaR1C1 = "3"
Range("D3").Select
ActiveCell.FormulaR1C1 = "4"
Range("E3").Select
ActiveCell.FormulaR1C1 = "5"
Range("F3").Select
ActiveCell.FormulaR1C1 = "6"
Range("A5").Select
ActiveCell.FormulaR1C1 = ""
Range("A5:B5").Select
Rem здесь записанный макрос заканчивается, почти весь дальнейший код вводится вручную
Call Расчет 'обращение к процедуре, формирующей содержательную часть таблицы,
End Sub
Sub Расчет()
Rem объявление локальных переменных
Dim RFirst As Integer
Dim rw As Integer
Dim Итого_Начислено As Double
Dim Итого_Удержано As Double
RFirst = 4 ' номер первой, после шапки, строки для записи данных
база ' вызов процедуры ввода исходных данных
For Ind_str = 1 To Count_Str ' цикл Count_Str хранит количество считанных процедурой «база» строк из файла исходных данных
rw = RFirst + Ind_str – 1 ' вычисляем номер текущей строки
' и заполняем данными ячейки текущей строки
Cells(rw, 1).Value = Ind_str
Cells(rw, 2).Value = FIO(Ind_str)
Cells(rw, 3).Value = начислено(Ind_str)
Cells(rw, 4).Value = удержано(Ind_str)
Cells(rw, 5).FormulaR1C1 = "=RC3– RC4"
With Range(Cells(rw, 1), Cells(rw, 5)) ' форматирование текущей строки
.HorizontalAlignment = xlLeft ' выравнивание влево
End With
' выделение цветом столбца, в котором происходит расчет
Cells(rw, 5).Interior.ColorIndex = 7
'накопление итогов
Итого_Начислено = Итого_Начислено + начислено(Ind_str)
Итого_Удержано = Итого_Удержано + удержано(Ind_str)
Next Ind_str
'формирование итоговой строки
rw = RFirst + Count_Str
Range(Cells(rw, 1), Cells(rw, 2)).MergeCells = True
Cells(rw, 1).Value = "Итого"
Cells(rw, 3).Value = Итого_Начислено
Cells(rw, 4).Value = Итого_Удержано
Cells(rw, 5).FormulaR1C1 = "=RC3– RC4"
' и оформление внешнего вида итоговой строки
Range(Cells(rw, 1), Cells(rw, 5)).Font.Bold = True
Range(Cells(rw, 1), Cells(rw, 5)).Interior.ColorIndex = 9
End Sub
Sub база()
Open "H:\proba.txt" For Input As #1 ' открываем файл исходных данных
Count_Str = 0 'инициализация счетчика строк
Do Until EOF(1) ' цикл выполняется, пока условие ложно (функция EOF возвращает значение True, если достигнут конец файла)
Count_Str = Count_Str + 1 'изменение счетчика строк
ReDim Preserve FIO(Count_Str) 'изменение размера динамических массивов
ReDim Preserve начислено(Count_Str)
ReDim Preserve удержано(Count_Str)
Input #1, FIO(Count_Str) 'ввод данных из файла
Input #1, начислено(Count_Str)
Input #1, удержано(Count_Str)
Loop ' возврат на начало цикла Do
Close #1 ' закрытие файла
End Sub
Запуск макроса на выполнение может осуществляться различными способами, описанными в справочной системе Microsoft Office Excel (с помощью команды меню, нажатием сочетания клавиш, щелчком кнопки панели управления, области объекта, графического объекта или элемента управления, а также автоматически из открытой книги). Например, можно указать имя доступного макроса и нажать кнопку Выполнить в диалоговом окне, которое открывается выбором на вкладке Разработчик в группе Код команды Макросы или сочетанием клавиш Alt+F8 (рис. 2.4).
Рис. 2.9. Окно управления макросами
Для лучшего понимания работы вышеприведённой программы не следует слепо копировать её текст в VBA-редактор. Рекомендуется сначала самостоятельно поэкспериментировать с созданием, изучением и выполнением (желательно пошаговым, в режиме отладки) более простых макросов, записав, например, действия по изменению одной-двух ячеек.
Если же всё сделано правильно (программа не содержит ошибок, и файл исходных данных подготовлен соответствующим образом: запятая играет роль разделителя полей, а конец строки – записей), можно использовать разработанный макрос (Макрос1) для автоматизированного создания табличного документа по форме, представленной на рисунке 2.1. При этом содержательная часть таблицы соответствует исходным данным текстового файла (рис. 2.2). На рисунке 2.5 представлен вид рабочего листа, отражающего результаты выполнения разработанного макроса.
Рис. 2.5. Результат выполнения макроса
Работу программы следует проверить на другом (как меньшем, так и большем) наборе исходных данных, изменив соответствующим образом текстовый файл.