- Главная
- Информатика
- Тема VBA
Содержание
- 2. Первая группа модулей существует в документе всегда, для других групп имеются методы для их создания или
- 3. Типы данных Тип данных определяет диапазон возможных значений переменной, количество памяти для ее размещения и набор
- 4. Неявный - VBA создает переменную и резервирует память для ее хранения, когда эта переменная в первый
- 5. Неименованные константы — это фактические значения данных определенного типа. Их можно использовать без какого-либо объявления, непосредственно
- 6. Операции В программах на VBA можно использовать весь типовой для универсального языка программирования набор операций: математические
- 7. Таблица 3 – Операции отношения Таблица 4 – Логические операции
- 8. Таблица 5 – Операции над строками Оператор присваивания Оператор присваивания предназначен для задания ("присваивания") значения переменным,
- 9. Приоритеты операций Порядок выполнения операций определяется расстановкой круглых скобок и приоритетом (старшинством) операций. Это обеспечивает однозначность
- 10. Функции взаимодействия с пользователем Для организации диалога с пользователем VBA представляет две встроенные функции - MsgBox
- 11. Простой пример использования функции MsgBox: Sub sample2() MsgBox "Видите ли вы две кнопки?", vbYesNo + vbInformation,
- 12. Таблица 7 – Возвращаемые значения функции MsgBox Дополним код листинга 3 проверкой возвращенного значения (листинг 4).
- 13. Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле ввода, устанавливает режим ожидания ввода
- 14. Приведем пример использования функции InputBox для получения имени пользователя. Sub sample5() Dim username As String username
- 15. Километры в метры. Метры в сантиметры. Дециметры в километры. Тонны в килограммы. Центнеры в граммы. Гектары
- 16. Контрольные вопросы: Понятие макроса. Модуль – это? Назовите типы модулей VBA, которые Вы знаете. Как создать
- 17. Логические функции. Для выполнения следующих лабораторных работ необходимо ознакомиться с логическими функциями И(), ИЛИ(), ЕСЛИ(). Логическая
- 18. Логическая функция ЕСЛИ() – это условный оператор (развилка)или проверка выполнения некоторого условия. Возвращает одно значение, если
- 19. Условный оператор If Условный оператор – это структура, которая выбирает ту или иную ветвь кода процедуры
- 20. Примеры использования условного оператора приведены в листингах 1 и 2. Листинг 1. Полная форма условного оператора
- 21. Логические выражения могут быть построены с помощью логических функций Not, And, Or, Xor, Imp, Eqv (листинг
- 22. Оператор выбора Select Case Оператор выбора применяется в том случае, если проверяемое условное выражение может принимать
- 23. Отыскивается только первый подходящий элемент списков выражений. Пример использования оператора Select Case приведен в листинге 4.
- 24. Оператор безусловного перехода GoTo Оператор безусловного перехода GoTo всегда изменяет порядок выполнения операторов в процедуре или
- 26. Скачать презентацию
Первая группа модулей существует в документе всегда, для других групп имеются
Первая группа модулей существует в документе всегда, для других групп имеются
Чтобы создать модуль в проекте необходимо выполнить команду 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…
Типы данных
Тип данных определяет диапазон возможных значений переменной, количество памяти для
Типы данных
Тип данных определяет диапазон возможных значений переменной, количество памяти для
Таблица 1 – Типы данных VBA
Неявный - VBA создает переменную и резервирует память для ее хранения,
Неявный - VBA создает переменную и резервирует память для ее хранения,
Явный - имя и тип переменной определяются до первого обращения.
Явное объявление переменных предпочтительнее, так как:
ускоряет выполнение кода;
уменьшается количество ошибок;
код становится более понятным.
Для явного объявления переменных используется оператор Dim со следующим синтаксисом:
Dim <имяПеременной> [As <типДанных>],
здесь: имяПеременной - любой допустимый идентификатор;
типДанных - любой поддерживаемый VBA тип данных.
Для принудительного включения явного и обязательного объявления переменных используется оператор Option Explicit. Он должен быть расположен в самом начале модуля (раздел Declarations). При неявном объявлении переменной можно задавать ее тип, добавляя в конец имени специальные символы определения типа (type definition character). Эта возможность сохранена для совместимости с устаревшими версиями языка Basic.
Переменные
VBA поддерживает 2 способа объявления переменных:
Неименованные константы — это фактические значения данных определенного типа. Их можно
Неименованные константы — это фактические значения данных определенного типа. Их можно
Именованные константы — это мнемонические обозначения неименованных констант. Для использования в программе именованные константы должны быть предварительно объявлены с ключевым словом 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 поддерживает неименованные и именованные константы.
Операции
В программах на VBA можно использовать весь типовой для универсального языка
Операции
В программах на VBA можно использовать весь типовой для универсального языка
математические (или арифметические) – выполняются над числами и их результатом являются числа;
отношения – применяются не только к числам и их результатом являются логические значения;
логические – используются в логических выражениях и их результатом являются логические значения.
Таблица 2 – Математические операции
Таблица 3 – Операции отношения
Таблица 4 – Логические операции
Таблица 3 – Операции отношения
Таблица 4 – Логические операции
Таблица 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")
Приоритеты операций
Порядок выполнения операций определяется расстановкой круглых скобок и приоритетом (старшинством)
Приоритеты операций
Порядок выполнения операций определяется расстановкой круглых скобок и приоритетом (старшинством)
Таблица 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
Функции взаимодействия с пользователем
Для организации диалога с пользователем VBA представляет две
Функции взаимодействия с пользователем
Для организации диалога с пользователем VBA представляет две
Формат функции MsgBox:
MsgBox (Prompt [, Buttons] [, Title] [, HelpFile, Context]),
Назначение параметров:
Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения, из которого запускается программа VBA;
HelpFile – строковое выражение, определяющее имя файла справки, содержащего справочные сведения о данном диалоговом окне; обычно это файл, который вы уже должны были создать с помощью Windows Help Compiler. Если этот параметр указан, необходимо также указать параметр Context;
Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile;
Buttons – числовое выражение, которое задает количество и тип кнопок в диалоговом окне MsgBox. Buttons указывает также кнопку по умолчанию в диалоговом окне и содержит ли это диалоговое окно стандартные значки Windows для предупредительных сообщений и запросов пользователя. Значения Buttons можно получить из справочной системы.
Простой пример использования функции MsgBox:
Sub sample2()
MsgBox "Видите ли вы две
Простой пример использования функции MsgBox:
Sub sample2()
MsgBox "Видите ли вы две
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.
Таблица 7 – Возвращаемые значения функции MsgBox
Дополним код листинга 3 проверкой
Таблица 7 – Возвращаемые значения функции MsgBox
Дополним код листинга 3 проверкой
Листинг 4. Проверка возвращаемого значения MsgBox
Sub sample4()
' вызываем MsgBox и сохраняем значение в переменной
res = MsgBox("Видите ли вы две кнопки?", vbYesNo + vbInformation, "Сообщение")
' проверяем, какая кнопка нажата
If res = vbYes Then: MsgBox "Вы нажали Yes", "Результат выбора"
Else : MsgBox "Вы нажали No", "Результат выбора"
End If
End Sub
Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле
Функция InputBox() выводит на экран диалоговое окно, содержащее сообщение и поле
InputBox (Prompt [, Title] [, Default] [, XPos] [, Ypos] [, HelpFile, Context]),
Назначение параметров:
Prompt – строковое выражение, отображаемое как сообщение в диалоговом окне;
Title – строковое выражение, отображаемое в строке заголовка диалогового окна. Если этот параметр опущен, в строку заголовка помещается имя приложения;
Default – строковое выражение, отображаемое в поле ввода и используемое по умолчанию, если пользователь не введет другую строку. Если этот параметр опущен, поле ввода изображается пустым;
Xpos и Ypos – числовые выражения, которые указывают местоположение окна ввода и являются координатами верхнего левого угла диалогового окна; Xpos – горизонтальное расстояние от левого края окна; Ypos – вертикальное расстояние от верхнего края окна. Если эти параметры опущены, диалоговое окно выравнивается по центру экрана;
HelpFile – строковое выражение, определяющее имя существующего файла справки, содержащего справочные сведения о данном диалоговом окне. Если этот параметр указан, необходимо также указать параметр Context;
Context – числовое выражение, определяющее номер соответствующего раздела справочной системы. Если этот параметр указан, необходимо указать также параметр HelpFile.
Приведем пример использования функции InputBox для получения имени пользователя.
Sub sample5()
Dim
Приведем пример использования функции InputBox для получения имени пользователя.
Sub sample5()
Dim
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
Километры в метры.
Метры в сантиметры.
Дециметры в километры.
Тонны в килограммы.
Центнеры в граммы.
Гектары
Километры в метры.
Метры в сантиметры.
Дециметры в километры.
Тонны в килограммы.
Центнеры в граммы.
Гектары
Квадратные километры в ары. (1 ар=100 м2).
Кубические метры в кубические дециметры.
Кубические дециметры в кубические сантиметры.
Литры в кубические сантиметры.
Гектолитры в кубические дециметры.
Сажени в аршины.
Аршины в футы.
Футы в метры
Метры в дюймы.
Аршины в сантиметры
Дюймы в сантиметры
Морские мили в метры
Пуды в килограммы.
Фунты в килограммы
Пуды в фунты.
Метры в километры.
Сантиметры в метры.
Километры в дециметры.
Килограммы в тонны.
Граммы в центнеры.
Квадратные метры в гектары.
Ары в квадратные километры (1 ар=100 м2).
Кубические дециметры в кубические метры.
Кубические сантиметры в литры.
Варианты заданий. VBA. Встроенные функции ввода/вывода.
Написать программу перевода мерных единиц:
Контрольные вопросы:
Понятие макроса.
Модуль – это? Назовите типы модулей VBA, которые Вы
Контрольные вопросы:
Понятие макроса.
Модуль – это? Назовите типы модулей VBA, которые Вы
Как создать модуль?
Какие типы данных Вы знаете?
Использование и описание констант.
Использование и описание переменных.
Формат функции InputBox.
Формат функции MsgBox.
Логические функции.
Для выполнения следующих лабораторных работ необходимо ознакомиться с логическими функциями
Логические функции.
Для выполнения следующих лабораторных работ необходимо ознакомиться с логическими функциями
Логическая функция И() возвращает значение ИСТИНА, если все ее аргументы имеют значение ИСТИНА, и возвращает значение ЛОЖЬ, если хотя бы один аргумент имеет значение ЛОЖЬ.
Синтаксис логической функции И():
И (логическое_значение1;логическое_значение2;…)
Логическая функция ИЛИ() возвращает значение ИСТИНА, если хотя бы один из ее аргументов имеет значение ИСТИНА, и возвращает ЛОЖЬ, если все ее аргументы имеют значение ЛОЖЬ.
Синтаксис логической функции ИЛИ():
ИЛИ(логическое_значение1;логическое_значение2;…)
Аргументы этих логических функций должны быть логическими значениями, массивами или ссылками, которые содержат логические значения. Если аргумент, который является ссылкой или массивом, содержит тексты или пустые ячейки, то такие значения игнорируются. Если указанный интервал не содержит логических значений, то И() возвращает значение ошибки #ЗНАЧ!
Таблица истинности для логических функций:
Логическая функция ЕСЛИ() – это условный оператор (развилка)или проверка выполнения некоторого
Логическая функция ЕСЛИ() – это условный оператор (развилка)или проверка выполнения некоторого
Синтаксис логической функции ЕСЛИ():
ЕСЛИ (логическое_выражение; значение_если_ истина; значение_ если_ложь)
Логическое_выражение – это любое значение или выражение, принимающее значения ИСТИНА или ЛОЖЬ. Например, А10=100 – это логическое выражение; если значение в ячейке А10 равно 100, то выражение принимает значение ИСТИНА, а в противном случае – ЛОЖЬ.
Значение_если_истина – это значение, которое возвращается, если логическое_выражение равно ИСТИНА.
Значение_если_ложь – это значение, которое возвращается, если логическое_выражение равно ЛОЖЬ.
Эти значения могут быть формулами. До 7 функций ЕСЛИ могут быть вложены друг в друга для конструирования более сложных задач.
VBA. Ветвления
Ветвление - это управляющая операция языка программирования, позволяющая изменить порядок выполнения алгоритма программы.
Для реализации ветвлений в программах на VBA используются следующие операторы:
условный оператор If;
оператор выбора Select Case;
оператор безусловного перехода Goto.
Условный оператор 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 <оператор>
Примеры использования условного оператора приведены в листингах 1 и 2.
Листинг 1.
Примеры использования условного оператора приведены в листингах 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
Логические выражения могут быть построены с помощью логических функций Not, And,
Логические выражения могут быть построены с помощью логических функций Not, And,
Листинг 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
Оператор выбора 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 <логическаяОперация> <выражение> - проверяемое выражение сравнивается с указанным значением с помощью заданной логической операции (или операции отношения).
Отыскивается только первый подходящий элемент списков выражений. Пример использования оператора Select
Отыскивается только первый подходящий элемент списков выражений. Пример использования оператора Select
Листинг 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
Оператор безусловного перехода GoTo
Оператор безусловного перехода GoTo всегда изменяет порядок выполнения
Оператор безусловного перехода GoTo
Оператор безусловного перехода GoTo всегда изменяет порядок выполнения
Синтаксис оператора 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