
- •Типы данных
- •Dim ИмяПеременной As ТипДанных
- •Dim Имя_массива(список_размерностей) As Имя_типа
- •3.1. Правила записи операторов
- •3.2. Оператор присваивания
- •3.3. Операторы ввода-вывода
- •3.3.1. Оператор и функция MsgBox
- •3.3.2. Функция InputBox
- •Создание макроса
- •Интерфейс пользователя vba
- •Основные команды главного меню vb
- •Создание модуля
- •Создание форм
- •Лабораторная работа №1 Задание 1
- •Варианты заданий
- •Задание 2
- •Задание 3
- •Задание 4
- •VbInformation, "о программе"
Создание макроса
При работе с 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 заканчивает действие процедуры (макроса).