Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
И_Авто - копия.docx
Скачиваний:
1
Добавлен:
12.11.2019
Размер:
2.23 Mб
Скачать
    1. Разработка макроса средствами 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. Результат выполнения макроса

Работу программы следует проверить на другом (как меньшем, так и большем) наборе исходных данных, изменив соответствующим образом текстовый файл.