Слайд 1Язык программирования VBA
Тишков Артем Валерьевич
Степанов Александр Георгиевич (ГУАП)
2020
Слайд 2Рассматриваемые вопросы:
Создание и выполнение макросов Excel
Разработка пользовательской таблицы средствами процессора
Excel
Интегрированная среда разработки VBA
Типы записи ссылок в Excel
Анализ текста
созданного макроса
1.Элементарное взаимодействие Excel и VBA
Слайд 3Создание и выполнение макросов Excel
Макросом обычно называют последовательность операторов на
языке Visual Basic for Applications (VBA)
Каждый макрос должен иметь собственное
имя.
По своей сути макрос представляет собой программу и может быть создан автоматически в специальном режиме работы программной системы (в том числе и Excel) или как результат программирования в терминах языка системы
Слайд 4Создание и выполнение макросов Excel
Для создания макроса в Excel легче
всего использовать автоматический режим его создания, вызываемый из главного меню
Вид кнопкой Макросы.
Слайд 5Создание и выполнение макросов Excel
Проверьте установку уровня безопасности командой Параметры,
Центр управления безопасностью, Параметры управления безопасностью, Параметры макросов.
Слайд 6Создание и выполнение макросов Excel
Если в меню Вид, Макрос выбрать
пункт Запись макроса…, то откроется диалоговое окно, позволяющее задать имя
макроса и, при желании, комбинацию клавиш, с помощью которой он также может вызван
Слайд 7Создание и выполнение макросов Excel
Начиная с этого момента все действия
с рабочей книгой дополнительно записываются в файл макроса
Остановить запись макроса
можно через аналогичный пункт главное меню Вид, Макрос - Остановить запись
Слайд 8Разработка пользовательской таблицы средствами процессора Excel
Исходные данные
Слайд 9Разработка пользовательской таблицы средствами процессора Excel
Результаты программирования в Excel
Слайд 101.3. Интегрированная среда разработки VBA
Запуск редактора VBA
Слайд 11Интегрированная среда разработки VBA
Слайд 121.4. Типы записи ссылок в Excel
Два типа записи ссылок на
ячейки в формулах: A1 (по умолчанию) и R1C1.
A1: первый
символ имя столбца, второй – номер строки
R1C1: первые два символа “Row” + “1” – номер строки, вторые - “Column” + “1” – номер столбца. В программировании используется этот тип записи ссылок.
Слайд 13Типы записи ссылок в Excel
Использование этого стиля позволяют организовать относительную
и абсолютную адресацию к ячейкам таблицы (за счет введения в
строку символа $).
Слайд 14Типы записи ссылок в Excel
При использовании абсолютной адресации после символов
R и C указывается собственно номер строки и столбца. Так,
например, ячейка $B$3 имеет адрес R3C2.
Обратите внимание на то, что, в отличие от типа A1, при использовании типа ссылок R1C1 сначала записывается строка, а потом столбец.
Слайд 15Типы записи ссылок в Excel
При использовании относительной адресации в стиле
R1C1 после обозначения строки или колонки в квадратных скобках указывается
смещение по отношению к текущей ячейке.
Так, например, если данные находятся в ячейке B3, а ссылка на нее программируется в ячейке А5, то в формуле она запишется как R[-2]C[1].
Эта запись может интерпретироваться как обращение к ячейке, находящейся на одну строку выше и две колонки правее текущей.
Слайд 161.5. Анализ текста созданного макроса
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 Расчет_заработной_платы()
Расчет _заработной_платы Макрос
Макрос записан 01.12.2005 (Администратор)
Слайд 17Анализ текста созданного макроса
Слайд 18Анализ текста созданного макроса
Range (диапазон). Возникает при выделении
ActiveCell (активная ячейка).
Возвращает объект Range
FormulaR1C1. Свойство, возвращающее или задающее формулу типа
R1C1 в активную ячейку
Selection (выделение). Свойство, возвращающее выделенный объект
AutoFill (автозаполнение). Метод, осуществляющий заполнение выделенных ячеек
Слайд 192. Отладка и выполнение программы в среде VBA
Рассматриваемые вопросы:
Назначение
окон интегрированной среды разработки VBA
Выполнение программы в автоматическом режиме
Выполнение программы
в режиме отладки
Слайд 202.1. Назначение окон интегрированной среды разработки VBA
Слайд 21Назначение окон интегрированной среды разработки VBA
Окно проектов содержит список форм
и модулей текущего проекта.
Проект – набор файлов, используемых для построения
приложений.
Слайд 22Назначение окон интегрированной среды разработки VBA
Окно редактора кодов служит для
редактирования программного кода приложения. Для каждой формы и каждого модуля
кода создается свое окно.
Слайд 23Назначение окон интегрированной среды разработки VBA
Окно свойств перечисляет установленные свойства
выбранного объекта
Слайд 24Назначение окон интегрированной среды разработки VBA
Окно локальных переменных предназначено для
контроля за значениями переменных во время отладки программы
Слайд 25Назначение окон интегрированной среды разработки VBA
Кроме перечисленных интегрированная среда разработки
содержит окна
тестирования Immediate (немедленное выполнение), позволяющее изменять значения переменных программы
в момент ее выполнения и даже вводить дополнительные операторы;
просмотра мгновенных значений Watch, позволяющее вести контроль выбранной переменной программы;
некоторые другие.
Слайд 262.2. Выполнение программы в автоматическом режиме
Run, Run Sub/User Form
Run,
Run Macro
Слайд 272.3. Выполнение программы в режиме отладки
Debug, Step Into
Debug, Step
Over
Debug, Step Out
Debug, Run To Cursor
Debug, Toggle Breakpoint
Слайд 283. Обмен данными между Excel и VBA
Рассматриваемые вопросы:
Типы данных
VBA
Идентификаторы в VBA
Объявление переменных в VBA
Массивы в VBA
Оператор присваивания
Использование свойства
Cells() для обмена данными между Excel и VBA
Слайд 293.1. Типы данных VBA
Тип данных ‑ способ внутреннего представления данных
в памяти машины, учитывающий метод их кодирования в одной или
нескольких ячейках памяти и предусматривающий возможности их расшифровки или преобразования.
Слайд 30Типы данных VBA
Типы данных Excel
Слайд 33Типы данных VBA
Type (определяемый пользователем). Определяется элементами типа. Диапазон каждого элемента
определяется его типом данных
Type Запись_Ведомости
Фамилия_И_О As String
Начислено_Ведомость As Currency
Налог_Ведомость As
Currency
К_выдаче_Ведомость As Currency
End Type
Слайд 343.2. Идентификаторы в VBA
Идентификатором называется символическое имя ячейки памяти.
Каждый язык
программирования содержит свои правила составления таких имен.
Общим является то, что
программист вправе сам придумать имя, что позволяет ему сохранить в нем смысловое значение.
Слайд 35Идентификаторы в VBA
В языке VBA имеются следующие ограничения на имена:
Длина имени не должна превышать 255 символов.
Имя должно начинаться с
буквы.
Имя не может содержать точек и символов %, &, !, #, @, $
Буквы рассматриваются инвариантно по отношению к регистру, то есть имя Aa и aA есть одно и то же имя.
Допускается использование символов латыни и кириллицы.
Совпадения имен идентификаторов с так называемыми ключевыми словами не допускается..
Слайд 36Идентификаторы в VBA
Использование символов кириллицы в именах позволяет программисту создавать
осмысленные имена идентификаторов, что облегчает чтение и отладку программы
Слайд 37Идентификаторы в VBA
Возможные варианты идентификаторов языка VBA:
I, j, Name,
Переменная, Результат_вычислений.
Еще варианты записи идентификаторов:
A%, B&, C!, D#,
E@, F$.
В этом случае символы %, &, !, #, @, $ не входят в состав идентификатора и используются в качестве специального признака типа данных
Слайд 383.3. Объявление переменных в VBA
Dim I As Integer, Name, j
As Integer, Переменная As Integer, GGG As Integer
Обратите внимание
на то, что если вы не указываете явно тип переменной, то по умолчанию она имеет тип Variant. Так, в рассмотренном выше примере такой тип имеет переменная Name.
Слайд 39Объявление переменных в VBA
Обрабатывая файл исходного текста программы компилятор создает
двоичный файл, который впоследствии после дополнительной обработки представляет собой последовательность
кодов программы, выполняемой процессором
Там же в программе отводится область для хранения данных
Слайд 40Объявление переменных в VBA
Строка объявления переменных обрабатывается компилятором. Результат обработки
– резервирование ячеек памяти в двоичном файле
Адреса ячеек определяются как
смещение по отношению к первому байту исполняемой программы
После загрузки файла в ОЗУ адреса ячеек получают абсолютные значения
Слайд 413.4. Массивы в VBA
Практика программирования широко использует переменные, обращение к
которым ведется как по имени, так и по номеру.
В
этом случае можно говорить о создании переменных табличного типа, когда обращение к данным ведется по имени и номеру (индексу) внутри этого имени.
Такие переменные обычно называются массивами.
Слайд 42Массивы в VBA
Массив ‑ последовательно упорядоченные в памяти данные одного
типа
Каждый массив имеет имя
Имя массива – идентификатор, за которым
закреплен свой адрес ОЗУ
Слайд 43Массивы в VBA
Количество таких ячеек определяет размер массива
Объявления массивов:
Dim
YY(25)
Объявляется одномерный массив из 26 элементов. Начальный (базовый) индекс принят
по умолчанию равным 0.
Dim ZZ(3,10) As Single
Объявляется двумерный массив ZZ типа Single, первый индекс которого меняется в диапазоне от 0 до 3, а второй в диапазоне от 0 до 10.
Dim SS(-3 To 3,1 To 10) As Integer
Слайд 44Массивы в VBA
Dim SS(-3 To 3,1 To 10) As Integer
Обращение
к элементу массива в тексте программы с явным указанием номеров
элементов: SS(-2,5).
Если переменная Name содержит число –2, а ячейка Переменная число 5, то обращение SS(Name, Переменная) полностью эквивалентно предыдущему.
Если в процессе предыдущих вычислений переменная Name примет значение –4, а мы попытаемся выполнить SS(Name, Переменная), то произойдет обращение к несуществующему элементу массива и возникнет ошибка выхода индекса за границы массива.
Слайд 45Динамические массивы в VBA
Dim Начислено() As Currency, i As Integer
i
= 10
ReDim Начислено(1 To i)
Массив Начислено() первоначально был объявлен как
массив неопределенной длины. Инструкция ReDim изменила массив, причем память под него была отведена в момент выполнения программы.
Слайд 463.5. Оператор присваивания
Оператор присваивания обеспечивает занесение информации в ячейки памяти,
связанные с идентификатором и имеет символ равенства (=).
i =
10
В отличие обычного равенства, которое выполняется всегда, оператор присваивания имеет динамические свойства (зависит от времени).
Слайд 473.6. Использование свойства Cells() для обмена данными между Excel и
VBA
Отдельную проблему представляет прямая и обратная передача данных из таблицы
Excel в ячейки памяти, объявленные в программе, написанной на VBA.
Автоматически созданный макрос непосредственно манипулирует с ячейками таблицы используя стили ссылки на ячейки в Excel: A1 и R1C1.
Такой прием может быть использован и в рабочей программе, однако в этом случае ее модификация и использование существенно затруднены.
Слайд 48Использование свойства Cells() для обмена данными между Excel и VBA
Гораздо
предпочтительнее использовать свойство Cells() стандартного объекта Excel Range.
Сам объект
представляет собой ячейку, столбец, строку или выделенный диапазон листа Excel.
Свойство Cells() позволяет непосредственно обратиться к объекту Excel по номеру строки и колонки.
Поскольку это свойство установлено по умолчанию для рабочего листа Excel, то его можно использовать без дополнительных указаний.
Слайд 49Использование свойства Cells() для обмена данными между Excel и VBA
Если
запись свойства стоит слева от оператора присваивания, то производится запись
данных в ячейку таблицы, если справа, то считывание значения из ячейки таблицы.
Кроме собственно записи данных свойство Cells() в сочетании со свойствами других объектов (Font, Color и т.п.) позволяет задавать параметры шрифта, его цвет, фон и так далее.
Слайд 504. Операции VBA
Рассматриваемые вопросы:
Арифметические операции
Операции сравнения
Логические операции
Операции со строками
Слайд 555. Операторы VBA
Рассматриваемые вопросы:
Правила записи операторов в языке VBA
Условный оператор
Оператор
ветвления
Семейство операторов For
Семейство операторов Do
Слайд 56Операторы VBA
Оператором называется самостоятельная конструкция языка программирования, которая может быть
отдельно откомпилирована и выполнена в виде заранее определенной последовательности кодов
процессора
Слайд 575.1. Правила записи операторов в языке VBA
Операторы записываются на отдельных
строчках и могут не нумероваться.
Для размещения нескольких операторов на одной
строке между ними необходимо поставить символ двоеточие ( : ). Этот же символ используется для обозначения меток.
Для переноса продолжения оператора на следующую строку используется комбинация символов пробел знак подчеркивания ( _). Нельзя разбивать переносом выражения и строки. Допускается не более семи переносов строк одного оператора.
Слайд 59Условный оператор
Формат условного оператора
If Условие Then [Операторы] [Else Операторы_Else] End
If
Пример программы с условным оператором
If Таблица(i) > extr Then
extr = Таблица(i)
Else
End If
Слайд 61Оператор ветвления
Формат оператора ветвления
Select Case Выражение
[Case Значение1
[Операторы1]]
[Case ЗначениеN [ОператорыN]]
[Case Else [ОператорыElse]]
End Select
Слайд 62Оператор ветвления
Пример программы с оператором ветвления
Dim РежимРаботы As String, День
As Integer
День = 2
Select Case День
Case 1
РежимРаботы = "Прием документов"
Case 2, 3, 4
РежимРаботы = "Работа с документами"
Case 5
РежимРаботы = "Выдача документов"
Case 6, 7
РежимРаботы = "Выходные дни"
Case Else
РежимРаботы = "Ошибка задания номера дня"
End Select
Слайд 64 Семейство операторов For
Форматы оператора
For Счетчик=Начало To Конец [Step Шаг]
[Операторы]
[Exit
For]
[Операторы]
Next [Счетчик]
For Each Элемент In Группа
[Операторы]
[Exit For]
[Операторы]
Next [Элемент]
Слайд 65 Семейство операторов For
Пример программы с оператором цикла for
Dim i
As Integer, AA(10) As Double, _
BB(10) As Double, j As
Variant
For i = 1 To 10
AA(i) = i
Next i
For Each j In AA
BB(j) = AA(j)
Next j
Слайд 68Семейство операторов Do
Do [While Условие]
[Операторы]
[Exit Do]
[Операторы]
Loop
Do
[Операторы]
[Exit Do]
[Операторы]
Loop [While Условие]
Операторы While выполняются до тех пор,
пока Условие
= True.
или
Слайд 69Семейство операторов Do
Пример программы с оператором цикла While
Dim
i As Integer, AA(10) As Double, _
BB(10) As Double, j
As Variant
i = 1
Do While i <= 10
AA(i) = i
i = i + 1
Loop
j = 1
Do
BB(j) = AA(j)
j = j + 1
Loop While j <= 10
Слайд 70Семейство операторов Do
Do [Until Условие]
[Операторы]
[Exit Do]
[Операторы]
Loop
Do
[Операторы]
[Exit Do]
[Операторы]
Loop [Until Условие]
Операторы Until
выполняются до тех пор, пока Условие = False
или
Слайд 71Семейство операторов Do
Пример программы с оператором цикла Until
Dim i As
Integer, AA(10) As Double, _
BB(10) As Double, j
As Variant
i = 1
Do Until i > 10
AA(i) = i
i = i + 1
Loop
j = 1
Do
BB(j) = AA(j)
j = j + 1
Loop Until j > 10
Слайд 72Семейство операторов Do
Оператор выполняется, пока Условие = True
While Условие
[Операторы]
Wend
Слайд 736. Процедуры и функции
Рассматриваемые вопросы:
Процедуры в VBA
Функции в VBA
Возврат значений
из процедур и функций в вызывающую программу через список формальных
параметров
Встроенные функции
Функции Excel, определенные пользователем
Слайд 746.1. Процедуры в VBA
Процедурой называется самостоятельная программа, предназначенная для решения
определенной задачи.
Каждая процедура имеет имя. Это имя является идентификатором процедуры.
Макрос
Excel представляет собой процедуру VBA.
Слайд 75Процедуры в VBA
Каждая процедура может быть вызвана по имени. Если
вызов отсутствует, то процедура выполняться не будет.
Процедура может быть запущена
на выполнение с помощью интегрированной среды отладки VBA.
Каждая процедура имеет свои коды, которые должны быть оформлены заданным языком программирования способом.
Для решения задачи процедура может потребовать набор аргументов (исходные данные), которые передаются ей в момент вызова.
Слайд 76Процедуры в VBA
Формат описания процедуры:
[Private или Public] [Static] Sub Имя
[(СписокАргументов)]
[Операторы]
[Exit Sub]
[Операторы]
End Sub
Слайд 77Процедуры в VBA
Формат описания списка аргументов:
[Optional] [ByVal или ByRef] [ParamArray]
ИмяПеременной[()] [As Тип] [=поУмолчанию]
Optional - необязательный элемент. Должен иметь тип
Variant. Все последующие элементы списка должны иметь такой же ключ и тип.
Способ передачи параметров
ByVal –по значению, ByRef – по ссылке (по умолчанию)
Слайд 78Процедуры в VBA
Формат описания списка аргументов:
[Optional] [ByVal или ByRef] [ParamArray]
ИмяПеременной[()] [As Тип] [=поУмолчанию]
ParamArray – неизвестное число параметров. Может быть
использовано только с последним элементом списка формальных параметров и позволяет передавать динамически объявляемый массив
Слайд 79Процедуры в VBA
Формат описания списка аргументов:
[Optional] [ByVal или ByRef] [ParamArray]
ИмяПеременной[()] [As Тип] [=поУмолчанию]
ИмяПеременной[()] - аргумент процедуры (обычная переменная или
массив). Идентификатор, имеющий смысл формального параметра процедуры. Может быть несколько аргументов.
Слайд 80Процедуры в VBA
Формат описания списка аргументов:
[Optional] [ByVal или ByRef] [ParamArray]
ИмяПеременной[()] [As Тип] [=поУмолчанию]
[As Тип] - тип данных аргумента
Слайд 81Процедуры в VBA
Формат описания списка аргументов:
[Optional] [ByVal или ByRef] [ParamArray]
ИмяПеременной[()] [As Тип] [=поУмолчанию]
[=поУмолчанию] - значение аргумента по умолчанию
Слайд 82Процедуры в VBA
После заголовка процедуры следует конечное число обычных операторов
языка VBA, представляющих собой тело определения функции. Если в их
состав входит операторы объявления переменных Dim, то имеет место объявление собственных локальных переменных процедуры.
Если в заголовке процедуры не указан ключ Static, то эти переменные не сохраняют свои значения между вызовами и каждый раз значения в них должны записываться заново.
Слайд 83Процедуры в VBA
Пример процедуры:
Sub ПримерПроцедуры(День As Integer, _ РежимРаботы As
String)
Select Case День
Case 1
РежимРаботы =
"Прием документов"
Case 2, 3, 4, 5
РежимРаботы = "Выдача документов"
Case Else
РежимРаботы = "Выходные дни"
End Select
End Sub
Слайд 84Процедуры в VBA
Пример вызывающей процедуры:
Sub ДемонстрацияПримераВызоваПроцедуры()
Dim a As Integer b
As Integer , _
s As String, ss As String
a
= 1
Call ПримерПроцедуры(a, s)
b = 6
ПримерПроцедуры b, ss
End Sub
Слайд 85Процедуры в VBA
Аргументами процедуры в момент ее описания являются так
называемые формальные параметры. Они используются как полноправные участники любых операций
и операторов тела процедуры для указания необходимой последовательности действий
Формальные параметры получают физические адреса памяти для своего размещения они только в момент вызова процедуры. Обычно говорят, что процедура (функция) вызывается с фактическими параметрами
Слайд 866.2. Функции в VBA
Функцией называется самостоятельная вызываемая через оператор присваивания
программа, предназначенная для решения определенной задачи.
Слайд 87Функции в VBA
[Public или Private] [Static] Function Имя [(СписокАргументов)] [As
Тип]
[Операторы]
[Имя=Выражение]
[Exit Function]
[Операторы]
[Имя=Выражение]
End Function
Слайд 88Функции в VBA
Формат описания списка аргументов:
[Optional] [ByVal или ByRef] [ParamArray]
ИмяПеременной[()] [As Тип] [=поУмолчанию]
Слайд 896.3. Возврат значений из процедур и функций в вызывающую программу
через список формальных параметров
При создании определений функций в языке VBA
программисту предоставляют возможность передавать значения через список формальных параметров двумя способами: по значению ByVal и по ссылке ByRef.
Слайд 90Возврат значений из процедур и функций в вызывающую программу через
список формальных параметров
Первый способ (по значению) является основным и выбирается
исходя из соображений повышения надежности создаваемой программы. Если он используется, то вызываемая функция или процедура работает только с копией значения, находящегося в фактической ячейке вызывающей программы в момент вызова функции и не может изменить его. Поэтому в этом случае реализуется механизм односторонней передачи данных от вызывающей функции к вызываемой.
Слайд 91Возврат значений из процедур и функций в вызывающую программу через
список формальных параметров
Второй способ (по ссылке) отличается тем, что вызываемая
функция получает в свое распоряжение не копию данных, а адрес ячейки памяти, в которой эти данные находятся. Как следствие, у вызываемой функции появляется возможность изменить содержимое ячеек вызывающей программы. Для этого в определении функции оператором присваивания задаются необходимые значения формальному параметру. В момент вызова процедуры (функции) формальному параметру ставится в соответствие фактическая ячейка памяти вызывающей программы. Именно в ней и произойдут указанные в определении изменения.
Слайд 936.5. Функции Excel, определенные пользователем
'Функция, определенная пользователем
Function Расчет_налога(Начислено As _
Integer)
Расчет_налога = Начислено * 0.12
End Function