Содержание

Слайд 2

Первая группа модулей существует в документе всегда, для других групп имеются

Первая группа модулей существует в документе всегда, для других групп имеются

методы для их создания или загрузки из соответствующих файлов.
Чтобы создать модуль в проекте необходимо выполнить команду Insert => Module (UserForm, Class Module), что приведет к созданию выбранного модуля и изменению содержимого окна проекта. Появится строка Моdulе1, соответствующая вставленному модулю в окне проекта. Модуль может быть создан автоматически, когда пакет (Word, Excel) выполняет запись макроса, ему присваивается имя ModuleN, где N – первый свободный номер в проекте модулей во время текущего сеанса работы. Например, в первый раз, когда вы сохраняете записанный макрос в Книге1.xls, Excel создает модуль с именем Module1. Если вы продолжаете записывать макросы в том же сеансе работы и сохранять их там же, Excel продолжает сохранять записанные макросы в том же модуле Module1 до тех пор, пока вы не выберете другую рабочую книгу. Если позже в том же сеансе работы вы опять захотите сохранить записанные макросы в Книге1.xls, то будет добавлен другой модуль с именем Module2.
Любой из добавляемых модулей может быть импортирован в проект, используя команду File => Import File…, затем надо показать нужный файл для загрузки. Эта команда бывает очень удобной, для внесения в проект набора стандартных процедур, которые вы используете при создании своих программ. Чтобы создать такие файлы для загрузки, нужно необходимые модули экспортировать в файл по команде File => Export File…
Слайд 3

Типы данных Тип данных определяет диапазон возможных значений переменной, количество памяти

Типы данных
Тип данных определяет диапазон возможных значений переменной, количество памяти для

ее размещения и набор допустимых операций. Базовые типы данных VBA приведены в табл. 1.
Таблица 1 – Типы данных VBA
Слайд 4

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

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

когда эта переменная в первый раз появляется в каком-либо операторе VBA (обычно в операторе присваивания).
Явный - имя и тип переменной определяются до первого обращения.
Явное объявление переменных предпочтительнее, так как:
ускоряет выполнение кода;
уменьшается количество ошибок;
код становится более понятным.
Для явного объявления переменных используется оператор Dim со следующим синтаксисом:
Dim <имяПеременной> [As <типДанных>],
здесь: имяПеременной - любой допустимый идентификатор;
типДанных - любой поддерживаемый VBA тип данных.
Для принудительного включения явного и обязательного объявления переменных используется оператор Option Explicit. Он должен быть расположен в самом начале модуля (раздел Declarations). При неявном объявлении переменной можно задавать ее тип, добавляя в конец имени специальные символы определения типа (type definition character). Эта возможность сохранена для совместимости с устаревшими версиями языка Basic.

Переменные
VBA поддерживает 2 способа объявления переменных:

Слайд 5

Неименованные константы — это фактические значения данных определенного типа. Их можно

Неименованные константы — это фактические значения данных определенного типа. Их можно

использовать без какого-либо объявления, непосредственно в выражениях.
Именованные константы — это мнемонические обозначения неименованных констант. Для использования в программе именованные константы должны быть предварительно объявлены с ключевым словом Const.
Синтаксис объявления именованных констант:
Const <имяКонстанты> [As <типДанных>] = <значение1>,
где: имяКонстанты – имя константы;
значение – значение константы.
Пример:
Const intPersonCount As Integer = 100
Const maxLen% = 50
Библиотеки типов VBA представляют множество встроенных констант. Такие константы используются обычно при работе с объектами приложения. Эти константы не требуют предварительного описания. Имена встроенных констант начинаются с префикса, который указывает, к объекту какого приложения Microsoft Office они относятся: xl(Excel), wd(Word), ac(Access), pp(Power Point), ol(Outlook), vb(VBA).

Константы
VBA поддерживает неименованные и именованные константы.

Слайд 6

Операции В программах на VBA можно использовать весь типовой для универсального

Операции
В программах на VBA можно использовать весь типовой для универсального языка

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

Таблица 2 – Математические операции

Слайд 7

Таблица 3 – Операции отношения Таблица 4 – Логические операции

Таблица 3 – Операции отношения

Таблица 4 – Логические операции

Слайд 8

Таблица 5 – Операции над строками Оператор присваивания Оператор присваивания предназначен

Таблица 5 – Операции над строками

Оператор присваивания
Оператор присваивания предназначен для задания

("присваивания") значения переменным, инициализации констант или изменения свойств объекта. Формат оператора присваивания:
[Let] <имяЭлемента> = <выражение>,
где: Let - необязательная инструкция, которая сохранена для совместимости;
<имяЭлемента> – это идентификатор переменной, константы (при объявлении) или свойства объекта;
<выражение> состоит из переменных, констант, операций и функций.
Примеры использования оператора присваивания:
Place="d:\windows\system"
File="GameTree.Exe"
Student_Card(100).Group=33
Для присваивания переменной ссылки на объект применяется инструкция Set:
Set <объектная Переменная> = [New] <объектноеВыражение> | Nothing,
где: New – опция (ключевое слово), которая используется при создании нового экземпляра класса;
Nothing – опция (ключевое слово), которая позволяет освободить все системные ресурсы и ресурсы памяти, выделенные для объекта. В следующем примере инструкция Set присваивает переменной MyRange ссылку на диапазон ячеек А1:В1 – Set MyRange = Range("A1:B1")
Слайд 9

Приоритеты операций Порядок выполнения операций определяется расстановкой круглых скобок и приоритетом

Приоритеты операций
Порядок выполнения операций определяется расстановкой круглых скобок и приоритетом (старшинством)

операций. Это обеспечивает однозначность в трактовании значений выражений. В таблице 6 приведены приоритеты выполнения операций.

Таблица 6 – Приоритеты операции VBA

Для иллюстрации вышесказанного приведем пример программы, вычисляющей диаметр, периметр и площадь круга, заданного радиусом (листинг 1).
Листинг 1. Переменные, константы, операции
Private R As Single 'радиус
Public D As Single, S As Single, P As Single 'диаметр, периметр, площадь
Const PI = 3.14 'Константа PI (имеется встроенная функция VBA)
Sub sample1()
Dim res As String
R = 20
D = 2 * R 'вычисляем диаметр
S = PI * R ^ 2 'вычисляем площадь
P = D * PI 'вычисляем периметр
'формируем строку сообщения
res = "Для окружности с радиусом " & CStr(R) & " диаметр равен " & CStr(D) &
_ ", периметр - " & CStr(P) & ", площадь - " & CStr(S)
Debug.Print res ' вывод результата в окно отладчика
End Sub

Слайд 10

Функции взаимодействия с пользователем Для организации диалога с пользователем VBA представляет

Функции взаимодействия с пользователем
Для организации диалога с пользователем VBA представляет две

встроенные функции - MsgBox и InputBox. Окно сообщений MsgBox выводит сообщения для пользователя, а окно ввода InputBox обеспечивает возможность получения информации от пользователя. Функция MsgBox() выводит на экран диалоговое окно, содержащее сообщение, устанавливает режим ожидания нажатия кнопки пользователем, а затем возвращает значение типа Integer, указывающее, какая кнопка была нажата.
Формат функции MsgBox:
MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context]),
Назначение параметров:
Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения, из которого запускается программа VBA;
HelpFile – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне; обычно это файл, который вы уже должны были создать с помощью Windows Help Compiler. Если этот параметр указан, необходимо также указать параметр Context;
Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile;
Buttons – числовое выражение, которое задает количество и тип кнопок в диалоговом окне MsgBox. Buttons указывает также кнопку по умолчанию в диалоговом окне и содержит ли это диалоговое окно стандартные значки Windows для предупредительных сообщений и запросов пользователя. Значения Buttons можно получить из справочной системы.
Слайд 11

Простой пример использования функции MsgBox: Sub sample2() MsgBox "Видите ли вы

Простой пример использования функции MsgBox:
Sub sample2()
MsgBox "Видите ли вы две

кнопки?", vbYesNo + vbInformation, "Сообщение"
End Sub
В данном примере MsgBox применяется не в виде функции, а в виде процедуры (т.е. не возвращает никакого значения). Следовательно, код выбранной кнопки нигде не сохраняется и не может быть использован. Чтобы определить, какая кнопка была нажата, MsgBox необходимо вызвать как функцию, т.е. сохранить возвращаемое значение в переменную (Листинг 2).
Листинг 3. Использование MsgBox
Sub sample3()
Dim res ' объявляем переменную
' вызываем MsgBox и сохраняем значение в переменной
res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение") Debug.Print res ' печатаем полученное значение
End Sub

При выполнении этого макроса, когда пользователь выбирает кнопку Yes или No в переменной res сохраняется число, соответствующее выбранной кнопке. Вместо возвращаемых функцией MsgBox целочисленных значений удобнее пользоваться предопределенными константами VBA. В таблице 7 приведены возвращаемые значения констант функции MsgBox.

Слайд 12

Таблица 7 – Возвращаемые значения функции MsgBox Дополним код листинга 3

Таблица 7 – Возвращаемые значения функции MsgBox

Дополним код листинга 3 проверкой

возвращенного значения (листинг 4).
Листинг 4. Проверка возвращаемого значения MsgBox
Sub sample4()
' вызываем MsgBox и сохраняем значение в переменной
res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение")
' проверяем, какая кнопка нажата
If res = vbYes Then: MsgBox "Вы нажали Yes", "Результат выбора"
Else : MsgBox "Вы нажали No", "Результат выбора"
End If
End Sub
Слайд 13

Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле

Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле

ввода, устанавливает режим ожидания ввода текста, а затем возвращает значение типа String, содержащее текст, введенный в поле. Формат функции InputBox:
InputBox (Prompt [, Title] [, Default] [, XPos] [, Ypos] [, HelpFile, Context]),
Назначение параметров:
Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения;
Default – строковое выражение, отображаемое в поле ввода и используемое по умолчанию, если пользователь не введет другую строку. Если этот параметр опущен, поле ввода изображается пустым;
Xpos и Ypos – числовые выражения, которые указывают местоположение окна ввода и являются координатами верхнего левого угла диалогового окна; Xpos – горизонтальное расстояние от левого края окна; Ypos – вертикальное расстояние от верхнего края окна. Если эти параметры опущены, диалоговое окно выравнивается по центру экрана;
HelpFile – строковое выражение, определяющее имя существующего файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот параметр указан, необходимо также указать параметр Context;
Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile.
Слайд 14

Приведем пример использования функции InputBox для получения имени пользователя. Sub sample5()

Приведем пример использования функции InputBox для получения имени пользователя.
Sub sample5()
Dim

username As String
username = InputBox("Введите ваше имя ", "Пример 5")
MsgBox ("Здравствуйте, "+username)
End Sub
В результате выполнения этого макроса на экран последовательно выводятся диалоговые окна ввода и вывода (см. рисунок 1).

Рисунок 1 – Интерактивные функции VBA.

Пример 1 – Перевод минут в часы
Sub lr1()
Const min_1h = 60
Dim min As Integer
Dim Hours As Single
min = Val(InputBox("Введите количество минут"))
Hours = min/min_1h
MsgBox min & " минут составляет " & Hours & " час (а, ов)"
End Sub

Слайд 15

Километры в метры. Метры в сантиметры. Дециметры в километры. Тонны в

Километры в метры.
Метры в сантиметры.
Дециметры в километры.
Тонны в килограммы.
Центнеры в граммы.
Гектары

в квадратные метры.
Квадратные километры в ары. (1 ар=100 м2).
Кубические метры в кубические дециметры.
Кубические дециметры в кубические сантиметры.
Литры в кубические сантиметры.
Гектолитры в кубические дециметры.
Сажени в аршины.
Аршины в футы.
Футы в метры

Метры в дюймы.
Аршины в сантиметры
Дюймы в сантиметры
Морские мили в метры
Пуды в килограммы.
Фунты в килограммы
Пуды в фунты.
Метры в километры.
Сантиметры в метры.
Километры в дециметры.
Килограммы в тонны.
Граммы в центнеры.
Квадратные метры в гектары.
Ары в квадратные километры (1 ар=100 м2).
Кубические дециметры в кубические метры.
Кубические сантиметры в литры.

Варианты заданий. VBA. Встроенные функции ввода/вывода.

Написать программу перевода мерных единиц:

Слайд 16

Контрольные вопросы: Понятие макроса. Модуль – это? Назовите типы модулей VBA,

Контрольные вопросы:
Понятие макроса.
Модуль – это? Назовите типы модулей VBA, которые Вы

знаете.
Как создать модуль?
Какие типы данных Вы знаете?
Использование и описание констант.
Использование и описание переменных.
Формат функции InputBox.
Формат функции MsgBox.
Слайд 17

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

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

И(), ИЛИ(), ЕСЛИ().
Логическая функция И() возвращает значение ИСТИНА, если все ее аргументы имеют значение ИСТИНА, и возвращает значение ЛОЖЬ, если хотя бы один аргумент имеет значение ЛОЖЬ.
Синтаксис логической функции И():
И (логическое_значение1;логическое_значение2;…)
Логическая функция ИЛИ() возвращает значение ИСТИНА, если хотя бы один из ее аргументов имеет значение ИСТИНА, и возвращает ЛОЖЬ, если все ее аргументы имеют значение ЛОЖЬ.
Синтаксис логической функции ИЛИ():
ИЛИ(логическое_значение1;логическое_значение2;…)
Аргументы этих логических функций должны быть логическими значениями, массивами или ссылками, которые содержат логические значения. Если аргумент, который является ссылкой или массивом, содержит тексты или пустые ячейки, то такие значения игнорируются. Если указанный интервал не содержит логических значений, то И() возвращает значение ошибки #ЗНАЧ!
Таблица истинности для логических функций:
Слайд 18

Логическая функция ЕСЛИ() – это условный оператор (развилка)или проверка выполнения некоторого

Логическая функция ЕСЛИ() – это условный оператор (развилка)или проверка выполнения некоторого

условия. Возвращает одно значение, если заданное условие при вычислении дает значение ИСТИНА, и другое значение, если – ЛОЖЬ.
Синтаксис логической функции ЕСЛИ():
ЕСЛИ (логическое_выражение; значение_если_ истина; значение_ если_ложь)
Логическое_выражение – это любое значение или выражение, принимающее значения ИСТИНА или ЛОЖЬ. Например, А10=100 – это логическое выражение; если значение в ячейке А10 равно 100, то выражение принимает значение ИСТИНА, а в противном случае – ЛОЖЬ.
Значение_если_истина – это значение, которое возвращается, если логическое_выражение равно ИСТИНА.
Значение_если_ложь – это значение, которое возвращается, если логическое_выражение равно ЛОЖЬ.
Эти значения могут быть формулами. До 7 функций ЕСЛИ могут быть вложены друг в друга для конструирования более сложных задач.

VBA. Ветвления
Ветвление - это управляющая операция языка программирования, позволяющая изменить порядок выполнения алгоритма программы.
Для реализации ветвлений в программах на VBA используются следующие операторы:
условный оператор If;
оператор выбора Select Case;
оператор безусловного перехода Goto.

Слайд 19

Условный оператор If Условный оператор – это структура, которая выбирает ту

Условный оператор If
Условный оператор – это структура, которая выбирает ту или

иную ветвь кода процедуры на основе некоторого предопределенного условия или группы условий. Общий синтаксис условного оператора:
If <условие1> Then
<Блок операторов1>
[ElseIf <условие2> Then
<Блок операторов2>
[ElseIf <условиеN> Then
<Блок операторовN>]
[Else <Блок операторов_Else>]]
End If
где:
<условиеN> - проверяемое условное выражение;
<Блок операторовN>; - операторы, выполняемые при истинности условия;
<Блок операторов_Else> - операторы, выполняемые по умолчанию.
Блоки ElseIf и Else - необязательны.
Помимо приведенной полной формы, поддерживается синтаксис краткой однострочной формы условного оператора следующего вида:
If <условие> Then <оператор>
Слайд 20

Примеры использования условного оператора приведены в листингах 1 и 2. Листинг

Примеры использования условного оператора приведены в листингах 1 и 2.
Листинг 1.

Полная форма условного оператора
Sub sample1()
Dim value As Long
Const MSG = "Вы ввели число, "
value = InputBox(prompt:="Введите число", Title:="Пример 1")
If value = 0 Then MsgBox (MSG & "равное 0")
ElseIf value > 0 Then MsgBox (MSG & "большее 0")
Else MsgBox (MSG & "меньшее 0")
End If End Sub
Листинг 2. Краткая форма условного оператора
Sub sample2()
Dim value As Long
Const MSG = "Вы ввели число, "
value = InputBox(prompt:="Введите число", Title:="Пример 1")
If value = 0 Then MsgBox (MSG & "равное 0")
If value > 0 Then MsgBox (MSG & "большее 0")
If value < 0 Then MsgBox (MSG & "меньшее 0")
End Sub
Слайд 21

Логические выражения могут быть построены с помощью логических функций Not, And,

Логические выражения могут быть построены с помощью логических функций Not, And,

Or, Xor, Imp, Eqv (листинг 3).
Листинг 3. Составные логические выражения
'Программа запрашивает имя пользователя и пароль,
'проверяет введенную информацию и выводит сообщение.
Sub sample3()
Const UNAME = "User"
Const PASSWD = "TopSecret"
login = InputBox(prompt:="Логин")
pass = InputBox(prompt:="Пароль")
If (login = UNAME) And (pass = PASSWD) Then
MsgBox ("Добро пожаловать!")
Else
MsgBox ("Вы не авторизованы!")
End If
End Sub
Слайд 22

Оператор выбора Select Case Оператор выбора применяется в том случае, если

Оператор выбора Select Case
Оператор выбора применяется в том случае, если проверяемое

условное выражение может принимать много значений. В такой ситуации запись кода получается более компактной и наглядной, чем при использовании условного оператора.
Формат оператора Select Case:
Select Case <проверяемое_Выражение>
Case <списокЗначений1> <блокОператоров1>
[Case <списокЗначений2> <блокОператоров2>]
[. . .]
[Case Else <блокОператоров_Else>]
End Select

Проверяемое выражение вычисляется в начале работы оператора Select Case. СписокЗначений – это одно или несколько выражений, разделенных запятой. При выполнении оператора проверяется, соответствует ли хотя бы один из элементов этого списка проверяемому выражению. Эти элементы списка значений могут иметь одну из трех форм:
<выражение> - в этом случае проверяется, совпадает ли значение проверяемого_Выражения с этим выражением.
<выражение1> To <выражение2> - проверяется, находится ли значение проверяемого_Выражения в указанном диапазоне значений.
Is <логическаяОперация> <выражение> - проверяемое выражение сравнивается с указанным значением с помощью заданной логической операции (или операции отношения).

Слайд 23

Отыскивается только первый подходящий элемент списков выражений. Пример использования оператора Select

Отыскивается только первый подходящий элемент списков выражений. Пример использования оператора Select

Case приведен в листинге 4.
Листинг 4. Оператор выбора
'Процедура выводит на экран окно сообщения,
'содержащее командные кнопки Yes, No и Cancel; затем определяет
'выбранную пользователем кнопку и выводит сообщение,
'поясняющее этот выбор.
 Sub sample4()
Const mTitle = "Демонстрация кнопок MsgBox"
Dim Resp As Integer
Resp = MsgBox(prompt:="Выберите кнопку", Title:=mTitle, _ Buttons:=vbYesNoCancel + vbQuestion)
Select Case Resp
Case Is = vbYes MsgBox prompt:="Вы выбрали кнопку 'Да'", Title:=mTitle, _ Buttons:=vbInformation
Case Is = vbNo MsgBox prompt:="Вы выбрали кнопку 'Нет'", Title:=mTitle, _ Buttons:=vbInformation
Case Is = vbCancel MsgBox prompt:="Вы выбрали кнопку 'Отмена'", Title:=mTitle, _ Buttons:=vbCritical End Select End Sub
Слайд 24

Оператор безусловного перехода GoTo Оператор безусловного перехода GoTo всегда изменяет порядок

Оператор безусловного перехода GoTo
Оператор безусловного перехода GoTo всегда изменяет порядок выполнения

операторов в процедуре или функции VBA без проверки каких-либо условий.
Синтаксис оператора GoTo:
GoTo <метка>
где:
<Метка> – это любая допустимая метка в той же процедуре или функции, которая содержит оператор GoTo.
Листинг 5. Использование GoTo
'Программа будет запрашивать ввод значения пока не будет введено четное число
Sub sample5()
getValue: ' метка
value = InputBox(prompt:="Введите четное число")
If (value Mod 2 <> 0) Then GoTo getValue
End Sub
Для иллюстрации решения задачи из листинга 5 приведем один из альтернативных способов, с помощью оператора цикла (листинг 6).
Листинг 6. Отказ от использования GoTo.
Sub sample6()
Do value = InputBox(prompt:="Введите четное число")
Loop While value Mod 2 <> 0 End Sub