Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Му макросы и VBA

.pdf
Скачиваний:
11
Добавлен:
15.03.2016
Размер:
234.79 Кб
Скачать

Министерство образования Республики Беларусь

МОГИЛЕВСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНОЛОГИЧЕСКИЙ ИНСТИТУТ

КАФЕДРА ИНФОРМАТИКИ И ВЫЧИСЛИТЕЛЬНОЙ ТЕХНИКИ

МАКРОСЫ И ОСНОВЫ ПРОГРАММИРОВАНИЯ НА VBA

В ПРИЛОЖЕНИИ MS OFFICE – EXCEL

Лабораторная работа

По курсу Технологии организации, хранения и обработки данных

Методические указания для студентов специальности

Э.01.07.01 “Бухгалтерский учет, анализ и аудит

дневной и заочной форм обучения

Могилев 2006

2

УДК 681.3

Рассмотрены и рекомендованы к изданию на заседании кафедры

Информатика и вычислительная техника

Протокол № от

Рекомендовано к переизданию на заседании кафедры ИВТ

Протокол № 3 от << 27>> октября 2006 г.

Составитель ст. преподаватель кафедры ИВТ

Пивоварчик В.А.

Рецензенты: зав. кафедрой ИВТ, к. ф.-м. н.

Воробьев Г.Н.

© Могилевский государственный технологический институт

3

Введение

Когда освоены основные возможности того или иного приложения, возникает задача оптимизации выполняемых действий. Некоторые

неизменные последовательности операций часто выполняются на многих листах книги и в других книгах, например, форматирование заданного диапазона ячеек с применением шрифта, размера, обрамления или ввод реквизитов предприятия и текущей даты во все документы. Такие последовательности могут быть запрограммированы, что сделает работу в приложении более эффективной.

Автоматизация процессов обработки информации может быть реализована как достаточно простыми способами (макросы), так и с использованием более сложных средств (пользовательские функции и автономные приложения на VBA). Использование макросов дает лучшее восприятие языка программирования в среде Microsoft Office – Visual Basic for Application.

Макросы

Макрос это программа, которая может быть создана пользователем приложения и может запускаться при нажатии группы клавиш на клавиатуре, кнопки инструментальной панели или при выборе команды из меню.

Существует два способа создания макроса. Первый автоматически записать последовательность введенных действий, второй вручную ввести инструкции на особом листе Excel, называемом модулем с помощью языка программирования VBA.

Воспользуемся первым способом как наиболее простым. Процесс создания макроса состоит из трех шагов:

шаг 1 – задание имени макроса; шаг 2 – выполнение действий для записи макроса; шаг 3 – остановка записи макроса.

Рассмотрим подробнее назначение каждого шага:

шаг 1 – меню Сервис/Макрос/Начать запись. Открывается диалоговое окно Запись макроса. В поле Имя макроса необходимо задать имя макроса. В поле Сочетание клавиш необходимо ввести символ (символ, используемый в сочетании клавиш, не может быть цифрой или специальным символом, только буквы латинского языка. Заданное сочетание клавиш будет заменять любое установленное по умолчанию в Microsoft Excel, пока книга, содержащая данный макрос, открыта). В поле Сохранить в необходимо выбрать Эта книга или Личная книга макросов (во втором случае макрос будет доступен любой открытой книге Excel). В поле Описание можно конкретизировать назначение данного макроса. Нажать кнопку ОК. С этого момента начинается шаг 2;

шаг 2 – выполняются любые действия, которые должны быть записаны в макросе. Предварительно следует спроектировать последовательность

4

действий в соответствии с назначением создаваемого макроса, так как нежелательно записывать в макрос лишние, ошибочные действия, которые будут усложнять и дезорганизовывать программу. Следует тщательно выверять все действия мышью или нажатия клавиш;

шаг 3 – остановка записи макроса через меню

Сервис/Макрос/Остановить запись или кнопку инструментальной панели Остановить запись (которая появляется с момента начала записи). Выполнение последнего шага обязательно, в обратном случае все дальнейшие действия будут записываться в макрос.

Практическое задание 1:

шаг 1 – Сервис/Макрос/Начать запись. Введите в поле Имя макроса Ввод. (Первым символом имени макроса должна быть буква. Остальные символы могут быть буквами, цифрами или знаками подчеркивания. В имени макроса не допускаются пробелы; в качестве разделителей слов следует использовать знаки подчеркивания.). В поле Сочетание клавиш - v. В поле Сохранить в книге выберите Эта книга). В поле Описание Ввод ряда чисел. Нажмите кнопку OK.

Шаг 2 - выполните макрокоманды, которые нужно записать, т.е.

§установите курсор в ячейке A1

§введите значение 1

§в ячейку A2 введите значение 2

§выделите ячейки A1 и A2 и протяните вниз на 10 ячеек

§выберите меню Формат/Ячейки

§вкладку Выравнивание, По горизонтали, По центру

§нажмите кнопку ОК

шаг 3 – меню Сервис/Макрос/Остановить запись. Макрос с именем Ввод создан.

Вызов макроса может осуществляться различными способами, а именно, через нажатие назначенных клавиш, через меню Сервис/Макрос/Макросы, выбрать имя макроса и команду Выполнить.

Практическое задание 2:

перейдите на новый лист в данной книге и нажмите сочетание клавиш ctrl+v. На новом листе должна появиться аналогичная предыдущему листу таблица. Затем перейдите на следующий лист и выполните команды в меню Сервис/Макрос/Макросы. В диалоговом окне предлагается список имен макросов. Выберите имя Ввод и кнопку Выполнить. Должна появиться аналогичная предыдущему листу таблица.

В одной книге под различными именами можно создать несколько макросов, все они записываются в одном модуле последовательно и их можно просмотреть.

5

Практическое задание 3:

просмотрите текст макроса и изучите его. Через меню Сервис/Макрос/Макросы вызовите диалоговое окно, в котором выберите имя созданного макроса Ввод и кнопку Войти. Открывается приложение VBA, которое содержит модули с текстами макросов. Одновременно включается режим отладки, для завершения которого необходимо выполнить команду Остановить.

При просмотре макроса можно отредактировать его содержимое. Для этого необходимо знать принципы записи инструкций на VBA.

Созданному макросу соответствует следующий набор инструкций:

1Sub Ввод()

2' Ввод Макрос

'Макрос записан 03.03.2001() ввод ряда чисел

3' Сочетание клавиш: Ctrl+v

4ActiveCell.FormulaR1C1 = "1" Range("A2").Select ActiveCell.FormulaR1C1 = "2"

5Range("A1:A2").Select

Selection.AutoFill Destination:=Range("A1:A10"),

6Type:=xlFillDefault

 

Range("A1:A10").Select

 

With Selection

7

.HorizontalAlignment = xlCenter

 

 

.VerticalAlignment = xlBottom

8

.WrapText = False

 

.Orientation = 0

 

.AddIndent = False

9

.ShrinkToFit = False

 

 

.MergeCells = False

10

End With

 

End Sub

Макрос начинается со слов

Sub Ввод()

………….. и заканчивается словами

End Sub

Между ними записываются инструкции. Инструкции сначала задают объект, а затем действие над ним. Например, объект это диапазон ячеек,

6

или рабочий лист, или графический объект, или книга и т.д., действие над диапазоном ячеек выделить или переместить содержимое ячейки и др. В VBA слову действие соответствует понятие метод. Каждый объект обладает набором методов, допустимых над ним.

Например,

Range("A2").Select объект диапазон A2, метод выделить,

аналогично,

Range("A1:A2").Select и т.д.

Если в созданном макросе какой-либо шаг записан неверно или пропущен, его можно отредактировать.

Например, в инструкции

Selection.AutoFill Destination:=Range("A1:A10"),

Можно 10 заменить на 20, закрыть модуль после редактирования и запустить макрос. В этом случае ввод будет осуществлен в 20 ячеек.

Объекты так же имеют свойства. Они записываются инструкциями,

заключенными между

With

………

End With

Например,

HorizontalAlignment = xlCenter содержимое по центру по горизонтали

VerticalAlignment = xlBottom содержимое по нижнему краю по вертикали,

Orientation = 0 отсутствие поворота символов, если задать равное -20, это будет означать наклон вправо.

В модуле так же используется понятие относительных и абсолютных ссылок. При записи макроса все ссылки в модуле являются абсолютными. Для того чтобы использовать относительные ссылки, необходимо использовать метод Offset по отношению к объекту Range.

Offset(rowOffset:=3, columnOffset:=3) – на три строки вниз и на три столбца вправо.

Абсолютные ссылки обычно используются, когда необходимо выполнить одно и то же действие в одном и том же месте на разных листах. Относительные когда в разных местах рабочего листа.

Макросы могут быть вложенными, т.е. внутри одного макроса м.б. вызван другой макрос. Но вложенный макрос м.б. записан самостоятельно, а не в рамках данного макроса, а вызван по указанию его имени. В этом случае макрос называется процедурой. Например,

Sub Ввод

……….

Форматирование

End Sub

Sub Форматирование

……….

End Sub

7

Создание вложенных макросов, т.е. процедур так же может быть реализовано через редактирование модуля.

Практическое задание 4:

Создайте макрос, который форматирует ячейки A1:A20, например, задайте полужирный шрифт и обрамите ячейки. Назовите макрос Форматирование. Затем войдите в режим редактирования макроса и в макросе Ввод введите имя Форматирование перед End Sub. Запустите на выполнение макрос Ввод. Он должен ввести ряд чисел и отформатировать ячейки.

Созданные макросы сохранялись в открытой книге, поэтому и доступны только в данной книге. Если макрос имеет достаточно обобщенный вид и может быть использован в различных книгах, его следует сохранить в личной книге макросов, она называется Personal. В этом случае макрос всега будет в списке имен макросов при вызове меню Сервис/Макрос/Макросы и начинаться он будет с имени Personal.

Пользовательские функции

Excel содержит более 400 встроенных функций, но иногда у пользователя возникает необходимость производить расчеты, не предусмотренные в стандартных функциях, в этом случае необходимо записать формулу. Если данная формула используется часто и имеет громоздкий вид, то рациональнее ее организовать в виде пользовательской функции. Пользовательская функция не может быть создана путем автоматической записи, аналогично макросу. Но она может быть записана вручную на листе, который является модулем. Если в модуле данной книги уже существуют макросы, то вход в модуль можно осуществить ранее описанным способом и дописать функцию ниже. Если модуль пустой, то его можно открыть через меню Сервис/Макрос/Редактор Visual Basic. В

редакторе выполнить команду Insert/Module.

Практическое задание 5:

Откройте редакторVisual Basic. В редакторе выполните команду Insert/Module. Введите следующий набор инструкций:

Function Треугольник(Optional k1, Optional k2, Optional g)

'проверка, введены ли значения параметров k1 и k2, если введены

'то осуществляется расчет гипотенузы

If Not (IsMissing(k1)) And Not (IsMissing(k2)) Then Треугольник = Sqr(k1 ^ 2 + k2 ^ 2)

'иначе следующая проверка, введены ли g и k2, если введены

'то осуществляется расчет катета

8

Else

If Not (IsMissing(k1)) And Not (IsMissing(g)) Then Треугольник = Sqr(g ^ 2 - k1 ^ 2)

Else

'иначе следующая проверка, введены ли g и k1, если введены,

'то расчет другого катета

If Not (IsMissing(g)) And Not (IsMissing(k2)) Then Треугольник = Sqr(g ^ 2 - k2 ^ 2)

Else

' если не введено хотя бы два значения параметров, то вывод

ошибочного значения Треугольник = Null End If

End If

End If

End Function

Закройте редактор.

Созданная пользовательская функция будет сохранена в данной книге и доступна для всех листов текущей книги.

После создания пользовательской функции ее можно применять так же, как любую встроенную функцию, но необходимо знать количество, последовательность и тип аргументов. В данном случае функция Треугольник имеет три аргумента, и вычисляет любую из сторон прямоугольного треугольника по двум заданным, k1 – катет, k2 – катет, g – гипотенуза. Все аргументы числового типа.

Практическое задание 6:

на листе Excel введите в ячейки значения и функцию следующим образом:

 

 

A

B

C

D

1

 

3

4

=Треугольник(A1;B1;)

=Треугольник(A1;B1;C1)

2

 

4

5

=Треугольник(A2;;B2)

 

3

 

3

5

=Треугольник(;A3;B3)

 

 

Вы должны получить результат:

 

 

 

A

B

C

D

1

 

3

4

5

5

2

 

4

5

3

 

3

 

3

5

4

 

В этой функции при ее вызове опущены некоторые аргументы. Эта

возможность реализована благодаря использованию ключевого слова

9

Optional, в этом случае аргумент является необязательным. В случае, если отсутствуют значения двух или трех аргументов, то зарезервированное слово Null выводит результат ошибочного типа - #ЗНАЧ!

Любая пользовательская функция почти всегда имеет как минимум один аргумент. Позволяется задавать до 13 аргументов, но можно создать функцию без аргументов. В этом случае она не будет использовать данные рабочего листа, а будет возвращать результат функции.

В примере вызов функции осуществляется 4 раза, в столбце C вычисляется в 1-ой строке гипотенуза, во 2-ой один катет, в 3-ей второй катет, в столбце D – происходит вызов функции с использованием трех аргументов, результатом является значение гипотенузы. Этот недостаток может быть решен путем организации дополнительных инструкций if при записи функции. Проблемы корректного использования функции ложатся непосредственно на его разработчика. Т.е. функции должны создаваться и отлаживаться так, чтобы работали правильно даже тогда, когда используются неожиданным способом.

Для анализа и отладки пользовательских функций большую роль играет их документирование, т.е. включение комментариев, а так же использование описательных имен, т.е. таких имен функций и переменных, которые облегчают понимание назначения переменных и действий над ними.

Документирование имеет большое значение для длинных и сложных процедур, для процедур, редких в использовании, и применяемых другими пользователями.

Для представленной выше функции можно ввести комментарий:

' Функция расчета стороны прямоугольного треугольника по значениям двух других сторон.

Как видно комментарий начинается с апострофа. С помощью апострофа

так же можно закомментировать любую временно неиспользуемую в функции инструкцию.

Введение в Visual Basic

Язык Visual Basic является объектно ориентированным, т.е. все элементы приложения Excel рассматриваются как объекты, причем, самый большой объект само приложение Excel. Объекты могут содержать в себе другие объекты, например, книги содержат листы, листы содержат ячейки.

Объекты обладают свойствами, например для диапазона ячеек цвет символов, шрифт, способы обрамления и др.

Объекты имеют методы, т.е. совокупность действий, которые можно выполнять над ними. Например, выделить диапазон ячеек, переместить.

Написание, компиляция, отладка программы происходит в интегрированной среде VBA, в которую пользователь попадает через меню

Сервис/Макрос/Редактор Visual Basic или через кнопку Редактор Visual Basic на инструментальной панели.

Создадим свое первое приложение в среде Visual Basic.

10

Практическое задание 7:

Загрузите редактор VBA. Просмотрите окно редактора. Изучите основные элементы интегрированной среды:

меню, инструментальную панель, окно Project, окно свойств Properties, остальное пространство занимает рабочая область, в которой происходит создание приложений пользователя. Возможно отражение окна пошаговой отладки через команду View/Immediate Window. Отразите это окно.

Все что делается через пользовательский интерфейс приложения, можно сделать и через объекты в VBA.

Вредакторе, как было отмечено выше, можно отредактировать макрос, можно написать пользовательскую функцию в модуле, а так же можно создать нестандартное диалоговое окно с элементами управления, которые позволят вызывать выполнение написанных кодов.

Проект может состоять из множества программных модулей, что упрощает его анализ.

Вмодуле возможно создание функций и процедур. Функции в отличие от процедур должны возвращать значение. Процедуры и функции могут быть открытыми и закрытыми. Открытая вызывается из любой процедуры любого модуля приложения, закрытая только в том же модуле. Если явно не указано, то открытая.

Событие это действие, распознаваемое объектом, например, щелчок кнопки мыши или нажатие клавиш. Можно написать код, реагирующий на такие действия. Объектами так же являются книга, лист, диаграмма, ячейка и др. Создавая процедуры, управляющие этими объектами, тем самым автоматизируется выполнение операций в приложении. Т.е. так называемое событийно - управляемое программирование. В том или ином виде с событийно - управляемым программированием уже встречались при запуске макросов при нажатии группы клавиш или вызове команды из меню. В Excel возможно написание процедур обработки событий на уровне листа, диаграммы, книги, приложения. Возможно создание нестандартного диалогового окна и написание кода, реагирующего на события диалогового окна и его элементов управления.

Для того чтобы написать процедуру (код) для формы (диалогового окна) или элемента управления (кнопки, списки, поля со списком, флажки, варианты выбора и др.) в редакторе VBA создается форма командой Insert/UserForm. На ней создаются необходимые элементы управления.

Затем двойным щелчком по нужному элементу происходит переход в режим написания кода. Для данной формы м.б. несколько процедур, т.е. для каждого элемента соответствующая процедура (по аналогии с макросом все коды записаны на одном листе последовательно) и при двойном нажатии на

элемент происходит переход непосредственно внутрь соответствующей процедуры, где записывается код для данного элемента. Кнопка, например, распознает событие Click, т.е. нажатие, т.о. пишется процедура обработки