Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лаб.раб.№1 VBA.doc
Скачиваний:
3
Добавлен:
20.07.2019
Размер:
921.09 Кб
Скачать

Создание макроса

При работе с Excel, как, впрочем, и с другими программами пакета Microsoft Office, для создания макроса легче всего использовать автоматический режим его создания, вызываемый из главного меню системы командами Сервис (Вид), Макрос.

Пункты меню Редактор Visual Basic и Редактор сценариев вызывают соответствующие программы. Если в меню Сервис, Макрос выбрать пункт Начать запись…, то откроется диалоговое окно, позволяющее задать имя макроса и, при желании, комбинацию клавиш, с помощью которой он также может вызван в обход пункта меню Макросы….Остановить запись макроса можно кнопкой Остановить запись дополнительно открывшейся панели инструментов или через аналогичный пункт главное меню Сервис, Макрос. Записанный макрос может быть сохранен в текущей рабочей книге и тогда он доступен в ней и других книгах в том случае, когда она открыта, или в личной книге макросов. В последнем случае он может быть доступен в любой открытой книге. Удалить макрос, созданный в текущей рабочей книге, можно кнопкой <Удалить> диалогового окна <<Макросы>>.

Необходимо принять во внимание существование двух возможных типов записи ссылок на ячейки в Excel: A1 и R1C1. По умолчанию при программировании формул используется стиль A1, для которого адрес каждой ячейки представляет собой строку символов, содержащую имя столбца и номер строки. При записи макросов Excel использует тип ссылки R1C1. В обозначении типа присутствуют первые буквы английских слов Row (строка) и Column (колонка). В отличие от типа A1, при использовании типа ссылок R1C1 сначала записывается строка, а потом столбец.

При использовании абсолютной адресации в стиле R1C1 после символов R и C указывается собственно номер строки и столбца. Так, например, ячейка $B$3 имеет адрес R3C2.

При использовании относительной адресации в стиле R1C1 после обозначения строки или колонки в квадратных скобках указывается смещение по отношению к текущей ячейке. Так, например, если данные находятся в ячейке B3, а ссылка на нее программируется в ячейке А5, то в формуле она запишется как R[-2]C[1]. Эта запись может интерпретироваться как обращение к ячейке, находящейся на две строки выше и одну колонку правее текущей. Соответственно запись R[2]C[-1] означает обращение к ячейке на две строки ниже и одну колонку левее (по отношению к активной ячейке A5 такая ячейка не существует).

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

Текст макроса с именем Расчет_заработной_платы имеет вид:

Sub Расчет_заработной_платы()

Range("C2").Select

ActiveCell.FormulaR1C1 = "=RC[-1]*R7C3"

Range("D2").Select

ActiveCell.FormulaR1C1 = "=RC[-2]-RC[-1]"

Range("C2:D2").Select

Selection.AutoFill Destination:=Range("C2:D5"), Type:=xlFillDefault

Range("C6").Select

ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)"

Range("D6").Select

ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)"

End Sub

В рассматриваемом примере оператор Sub Расчет_заработной_платы() представляет собой заголовок процедуры. Имя процедуры совпадает с именем макроса.

Первый исполняемый оператор программы Range("C2").Select создан системой в виде выражения, которое содержит в терминологии VBA свойство Range в сочетании с методом Select. В нашем примере аргумент свойства представляет собой ссылку на ячейку в стиле A1, с которой началось программирование макроса. Фактически эта строка программы представляет собой набор действий по активизации ячейки C2 рабочего листа Excel.

Оператор ActiveCell.FormulaR1C1="=RC[-1]*R7C3" заносит в активную ячейку формулу для вычисления величины подоходного налога. В формуле используется стиль ссылок R1C1, причем ее первый операнд задан в относительной адресации, а второй в абсолютной.

Операторы Range("D2").Select и ActiveCell.FormulaR1C1="=RC[-2]-RC[-1]" программы задают другую активную ячейку и заносят в нее формулу для вычисления суммы к выдаче.

Оператор Range("C2:D2").Select выделяет диапазон ячеек листа Excel, после чего выделенные ячейки копируются во все содержащие фамилии сотрудников строчки таблицы Selection.AutoFill Destination:=Range("C2:D5"), Type:=xlFillDefault

Для расчета суммы уплачиваемых налогов делается активной предназначенная для этого ячейка рабочего листа Range("C6").Select и в нее заносится формула, содержащая функцию суммирования данных выделенных ячеек. ActiveCell.FormulaR1C1="=SUM(R[-4]C:R[-1]C)" Система использовала относительную адресацию в формате R1C1.

Аналогичная операция проводится и с ячейкой, предназначенной для хранения общей суммы к выдаче: Range("D6").Select и ActiveCell.FormulaR1C1 = "=SUM(R[-4]C:R[-1]C)"

Оператор End Sub заканчивает действие процедуры (макроса).