ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ VBA (2).pptx
- Количество слайдов: 136
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ VBA
VBA – это языковый процессор интерпретирующего типа, который VBA построчно анализирует исходную программу и одновременно выполняет предписанные действия. ВВЕДЕНИЕ В VBA 2
Объктно-ориентированное программирование • ООП – это совокупность подходов, методов, стратегий, идей и понятий, определяющая стиль написания программ, в которой основными концепциями являются понятия объектов и классов. • Объект – это некоторая сущность, обладающая определённым состоянием и поведением, имеет заданные значения атрибутов и операций. • Класс — это тип, описывающий устройство объектов. Понятие “класс” подразумевает некоторое поведение и способ представления. 3
Объктно-ориентированное программирование • Класс это объединение данных и обрабатывающих их процедур и функций. Данные называются также переменными класса, а процедуры и функции методами класса. Переменные определяют свойства объекта, а совокупность их значений состояние объекта. 4
Объктно-ориентированное программирование • Наследование – позволяет описать новый класс на основе уже существующего (родительского), при этом свойства и функциональность родительского класса заимствуются новым классом. • Набор классов, связанных отношением наследования, называют иерархией. 5
Объктно-ориентированное программирование • Инкапсуляция – свойство языка программирования, позволяющее объединить данные и код в объект и скрыть реализацию объекта от пользователя. • Пользователю предоставляется только интерфейс объекта, т. е. способ взаимодействия с объектом. • Пользователь может взаимодействовать с объектом только через этот интерфейс. 6
Объктно-ориентированное программирование • Полифорфизм – это явление, при котором один и тот же программный код выполняется по разному в зависимости от того, объект какого класса используется при вызове данного кода. • Полиморфизм обеспечивается тем, что в классе потомке изменяют реализацию метода класса предка с обязательным сохранением сигнатуры метода. • Сигнатура метода – это сокращенная форма записи параметров метода и типов возвращаемого значения. 7
Объктно-ориентированное программирование • Абстракция данных – подход к обработке данных по принципу чёрного ящика. • Чёрный ящик – термин, используемый в точных науках для обозначения системы, механизм работы которой очень сложен, неизвестен или неважен в рамках данной задачи. Такие системы обычно имеют некий “вход” для ввода информации и “выход” для отображения результатов работы. • Данные обрабатываются функцией высокого уровня с помощью вызова функций низкого уровня. 8
Объктно-ориентированное программирование • Упорядоченный набор однотипных объектов – экземпляров одного класса называется семейством. • Семейство это объект, одним из методов которого является процедура, возвращающая ссылку на конкретный объект в семействе, а одним из свойств семейства – число объектов, хранящихся в нем. • Например, совокупность листов в приложении Excel образует семейство Worksheets. 9
Объктно-ориентированное программирование • Объекты и семейства сгруппированы в виде иерархических структур, которые называются объектными моделями. • В VBA определены специальные объектные модели для каждого приложения семейства Microsoft Office и объектные модели, общие для всех приложений Microsoft Office. 10
Объктно-ориентированное программирование Объектная модель Excel позволяет выполнять следующие действия: • автоматизировать решение повторяющихся задач; • настроить интерфейс Excel с помощью изменения существующих или создания новых панелей инструментов, меню и пользовательских форм; • добавить новые функции в Excel; • создавать сложные отчеты; • манипулировать данными и осуществлять анализ данных. 11
Основные понятия • Программный код в VBA состоит из инструкций. • Инструкция или оператор (англ. statement – утверждение; сообщение) – наименьшая автономная часть языка прграммирования команда. • Инструкции хранятся в процедурах, которые подразделяются на процедуры типа Sub и процедуры типа Function. 12
Основные понятия • Процедуру типа Sub в Excel называют также макросом. • Процедура отличается от функции тем, что функция возвращает вызвавшей ее программе единственное значение, которое там будет использовано. • Инструкции состоят из ключевых слов, констант и операторов. 13
Основные понятия • Процедуры хранятся в модулях, причём в одном модуле может храниться одна или несколько процедур. • Модуль можно определить как совокупность объявлений переменных и процедур, хранящихся как единое целое. • Совокупность модулей, предназначенных для решения одной задачи, образует проект. • Различают два основных типа модулей: стандартные модули и модули классов. 14
Основные понятия • Стандартный модуль – это элемент проекта, который содержит программный код, непосредственно используемый остальными элементами проекта (глобальные функции, переменные, константы и т. д. ). • Модуль класса – это модуль, в котором записывается программный код, реализующий работу созданных программистом классов. 15
Основные понятия • Формат процедуры имеет вид: [Public] [Private] [Static] Sub|Function <Имя. Процедуры> ([Параметры]) [‘Комментарии] <Инструкции> End Sub|Function • По умолчанию все процедуры VBA определяются как Public (открытые), т. е. их можно вызвать из любой части программы: из того же или другого модуля, из другого проекта. 16
Основные понятия • Объявить процедуру как Public можно так: Public Sub План() или Sub План () , т. к. процедура определяется как Public по умолчанию. • Если модуль объявлен как Private, например, Private Sub Доход (), то переменные, объекты и определяемые пользователем типы, описанные на уровне модуля, доступны только внутри проекта, содержащего этот модуль, но недоступны для других приложений или проектов. 17
Основные понятия • В процедуре, объявленной как Static, например, Private Static Sub Доход () все переменные в ней автоматически станут статическими и будут сохранять свои значения после завершения работы процедуры. 18
Основные понятия • Комментарий – любой текст, начинающийся с символа одиночная кавычка '. • Его можно вводить в начале строки программного кода или за последним символом инструкции. • Пустые комментарии, содержащие только символ “кавычка”, применяются для наглядного разделения процедуры на части. 19
Алфавит и словарь языка Программа на языке VBA формируется из предложений, состоящих из лексем и разделителей, которые формируются из конечного набора литер, образующих алфавит языка VBA. • Лексема – это единица текста программы, которую распознаёт компилятор и которая не может быть разбита в дальнейшем. В Visual Basic различают шесть классов лексем: • идентификаторы; • ключевые (зарезервированные) слова; • константы; • строки; • операции (знаки операций); • разделители. 20
Алфавит и словарь языка В алфавит VBA входят: • буквы латинского алфавита прописные: A, B, C, D, E, F, … X, Y , Z и строчные: a, b, c, d, e, … x, y, z; • буквы кириллицы прописные: А, Б, В, Г, В, Е … Э, Ю, Я и строчные: а, б, в, г, д. , е … э, ю, я; • цифры от 0 до 9; • символ подчеркивания “_”. 21
Алфавит и словарь языка В состав алфавита также входят: • не изображаемые символы, используемые для отделения лексем друг от друга (пробел, табуляция, переход на новую строку). • Лексемы включают в себя зарезервированные слова, идентификаторы (стандартные и пользовательские), специальные символы и метки; 22
Алфавит и словарь языка Специальные символы, участвующие в построении конструкций языка + плюс < меньше [] – минус _ ( ) * звёздочка . подчёркив ание точка ^ квадратн ые скобки круглые скобки тильда / , запятая ‘ апостроф = дробная черта равно : двоеточие $ > больше ; <= меньше или равно >= точка с <> запятой больше или равно знак доллара Не равно 23
Алфавит и словарь языка Слова в программах отделяются друг от друга разделителями и специальными символами. Разделителями являются: • пробел; • символ продолжения строки ( _ ); • символ табуляции. Специальные символы: +, – , * , / , ’, . , =, <, >, : – используются для обозначения операторов и других языковых конструкций. 24
Алфавит и словарь языка Все слова языка VBA можно разделить на четыре группы: • имена (идентификаторы); • ключевые (зарезервированные) слова; • числа; • строки. 25
Алфавит и словарь языка • Имя (идентификатор) – произвольная последовательность букв латинского и русского алфавита и цифр, не превышающая 255 символов, которая обязательно должна начинаться с буквы на любом регистре букв (верхнем или нижнем). 26
Алфавит и словарь языка • Ключевое (зарезервированное) слово – это слово, которое представляет целую языковую конструкцию или ее часть и может использоваться только в том виде, в каком оно указывается при описании синтаксиса языка. • Никакое другое слово в программе не должно совпадать с ключевым словом. 27
Алфавит и словарь языка • Текст программы на языке VBA состоит из последовательности предложений, каждое из которых представляет собой комбинацию ключевых слов и идентификаторов. • Строка – произвольная последовательность символов алфавита, заключенная в двойные кавычки (“”). Если строка включает символ кавычки, перед ним ставится еще один такой же символ, чтобы отличить его от символа конца строки, например “ОАО ““Океан””. • Число используется для представления дробных и целых чисел. Целое число записывается в виде последовательности цифр. Для записи десятичных чисел в качестве разделителя десятичных знаков используется точка “. ”. Для записи вещественных чисел можно использовать экспоненциальную форму. 28
Переменные • Переменные предназначены для хранения данных в оперативной памяти. • В программе перед использованием переменные нужно объявлять. • При объявлении переменной надо задаётся её имя и тип. • Тип указывает способ представления переменной. В переменных можно хранить практически любые типы данных: числа, строк текста, экземпляры объектов, элементы управления и т. д. • В VBA различают две группы типов данных: основные, называемые иногда базовыми или встроенными, и типы данных, определяемые пользователем. 29
Переменные : базовые типы переменных Visual Basic Тип Хранимая информация Целочисленные типы Byte Целые числа Boolean Логические значения Занимаемая память Интервалы значений 1 байт 2 байта Integer Целые числа 2 байта Long Integer Длинные целые 4 байта числа от 0 до 255 True (Истина) или False (ложно) от -32768 до 32767 +/-2. 1 E 9 30
Переменные : базовые типы переменных Visual Basic Типы с плавающей точкой Single Вещественные 4 байта числа одинарной точности с плавающей точкой Double Вещественные 8 байт числа двойной точности с плавающей точкой от -3. 402823 Е 38 до 1. 401298 Е-45 для отрицательных чисел и от 1. 401298 Е-45 до 3. 402823 Е 38 для положительных от 1. 7976313486232 Е 308 до -4. 94065645841247 Е 324 для отрицательных чисел и от 4. 94065645841247 Е-324 до 1. 7976313486232 Е 308 для положительных Строковые типы String (строка фиксированной длины) String (строка переменной длины) Текстовая 1 байт на каждый От 1 до 65400 информация (строка) символ Текстовая 10 байт + 1 байт От 0 до двух информация (строка) на каждый миллиардов символов 31 символ
Переменные : базовые типы переменных Visual Basic Объектные типы Object Рисунок или ссылка 4 байта на любой другой объект Ссылка на объект Типы Variant Значения любого из 16 байт для чисел, Любое числовое или перечисленных 22 байта + 1 байт на строковое значение типов данных каждый символ для строк Прочие типы Currency Числа, имеющие до 8 байт 15 цифр до десятичной точки и 4 цифры после нее (денежные единицы) Date Информация о дате 8 байт и времени Десятичное число 14 байт Decimal 32 от 922337203685477. 58 08 до 922337203685477. 58 08 от 1 января 100 г. до 31 -го декабря 9999 г. Целое – 29 знаков Вещественное – 27 знаков после
Переменные: явное объявление Для явного определения переменных, как правило, можно использовать следующий синтаксис: [Static|Public|Private] Dim <Имя. Переменной> [As <тип>] [, <Имя. Переменной>[As <тип>]]… • Здесь: • Dim – ключевое слово, которое означает, что объявляется переменная и резервируется область памяти для ее хранения; • Имя. Переменной – имя переменной (идентификатор); • As (Как) – ключевое слово, которое определяет тип данных для переменной; • Тип – тип данных для объявляемой переменной; • Private (Частный), Public (Общий) – ключевые слова, определяющие область видимости переменной; • Static (Статический) ключевое слово, которое определяет, сохраняет ли переменная свое значение при завершении процедуры и выходе из неё. • Примеры инструкций объявления переменных Dim Товар As String*15 Dim Цена As Currency Dim Количество As Byte, Вес As Single • 33
Переменные: неявное объявление • В этом способе определения переменных никакие инструкции для объявления переменной вообще не используются. • Транслятор VBA назначает ей тип Variant. • Variant рекомендуется использовать только в следующих случаях: • для ускорения процесса отладки программы; • пользователь не уверен, какой тип данных обрабатывается инструкцией в конкретной ситуации. 34
Переменные: константы Константа по определению является постоянной величиной и поэтому не меняет своего значения при выполнении программы. • Константы в VBA подразделяются на константы, определяемые пользователем, и встроенные константы. • Пользовательская константа должна объявляться. Const <Имя. Константы> [As <Тип. Данных>] = <Выражение> • где <Выражение> – это любое значение или формула, возвращающая значение, которое должно использоваться в качестве константы. • Пример Const ПИ As Single = 3, 1415 35
Переменные: константы • Встроенные константы используются обычно при работе с объектами приложения. Эти константы не требуют предварительного объявления. • Имена встроенных констант начинаются с префикса, который указывает, к объекту какого приложения Microsoft Office они относятся. • Встроенные константы объектов Excel имеют префикс xl, • Встроенные константы языка VBA имеют префикс vb и т. д. • Например, встроенные константы vb. Yes и vb. No используются в функции Msg. Box, предназначенной для вывода данных на экран 36
Строковые переменные • Различают строки переменной и фиксированной длины. • Строки переменной длины могут содержать до двух миллиардов символов; их размер заранее не определяется. • Строка фиксированной длины это строка постоянного размера, указанного при объявлении переменной. Строковые переменные фиксированной длины должны объявляться явно. 37
Строковые переменные • Синтаксис объявления строковой переменной следующий: Dim Var. Name As String [* Длина. Строки] • где Длина. Строки целочисленная переменная или константа, содержащая число, которое указывает длину строковой переменной. • Например: Dim str. My. Name As String* 20 объявляется строковая переменная фиксированной длины в 20 символов Dim int. Len As Integer Intlen = 10 Dim My. Name As String * Intlen объявляется строковая переменная длиной в 10 символов. 38
Переменные: массивы • Массив, представляет собой структуру, все Массив элементы которой имеют одинаковый тип. • Массивы могут быть одномерными и многомерными. • Для отображения отдельного столбца или отдельной строки таблицы, содержащей данные одинакового типа, может быть использован одномерный массив. • Для отображения таблицы – двумерный. • Для отображения совокупности таблиц – трёхмерный массив. • Количество размерностей массива может достигать 60. 39
Переменные: массивы • В VBA массив объявляется следующим образом: [Public | Private] Dim Имя. Массива([Индексы]) [As Тип. Данных] • где • Имя. Массива – идентификатор, определяющий имя массива; • Индекс – значение номера элемента в размерности массива, задаваемого одним из двух способов: 1. указанием номера последнего элемента в каждой размерности массива; 2. указанием номеров первого и последнего элемента в каждой размерности массива. 40
Переменные: массивы Dim Товар(2) As String*15 • Процедура Объявление. Массива 1: Sub Объявление. Массива 1() Пример 1: Dim Товар(2) As String*15 объявление одномерного массива Товар(0) = "Стул мягкий" Товар из трёх Msg. Box Товар(0) элементов, каждый из End Sub которых состоит не • выражения Товар(0), Товар(1), Товар(2) более чем из 15 являются элементами массива; символов. • инструкция Товар(0) = "Стул мягкий" присваивает первому элементу массива Товар значение текстовой константы "Стул мягкий"; • функция Msg. Box Товар(0) выводит значение этого элемента на экран. 41
Переменные: массивы Для изменения начала нумерации индексов массива можно поступить одним из следующих способов: • Использовать инструкцию Option Base 1. При этом инструкция Option Base 1 должна находиться в самом начале модуля VBA, перед первой процедурой модуля, например, • Option Base 1 Sub Объявление. Массива 2() ' Dim Товар(3) As String * 15 Товар(1) = "Стул мягкий" Msg. Box Товар(1) ' End Sub • Выполнить явное указание номера первого элемента в каждой размерности массива, например, Sub Объявление. Массива 3() ' Dim Товар(1 To 3) As String * 15 Товар(1) = "Стул мягкий" Msg. Box Товар(1) ' End Sub По умолчанию инструкция Option Base имеет значение 0 (ноль). 42
Переменные: массивы • При объявлении многомерного массива в поле индекса указывается несколько индексов, в соответствии с размерностью массива. • Например, двумерный массив из пяти строк и десяти столбцов объявляется без использования инструкции Option Base 1 одним из следующих способов: Dim Продажи(4, 9) As String или Dim Продажи(0 To 4, 0 To 9) As String 43
Переменные: массивы • В VBA существует способ выделения памяти под массивы, который называется динамическим, в котором память под массивы отводится и может быть перераспределена во время выполнения программы. • Такие массивы называются динамическими. 44
Переменные: динамические массивы Использование динамических величин предоставляет возможность подключать память динамически, что позволяет: • увеличить объем обрабатываемых данных; • если потребность в каких то данных отпала до окончания программы, то занятую ими память можно освободить для другой информации; • определять динамически изменяющееся количество реально существующих элементов массива. • Динамический массив объявляется следующим образом: [Public | Private] Dim Имя. Массива() [As Тип. Данных] т. е. размерность динамического массива в его объявлении не указывается. 45
Переменные: динамические массивы • Пример Dim Товар() As String * 15 • Перед использованием динамического массива необходимо переопределить его размеры. Это выполняется при помощи инструкции Re. Dim, используемой на уровне процедуры: Re. Dim [Preserve] Имя. Массива(Индексы) [As Тип. Данных] • Параметр Preserve используется для сохранения данных в существующем массиве при изменении размерности. В противном случае все старые значения элементов массива будут удалены. 46
Переменные: динамические массивы • Однако если новый размер массива меньше, чем количество помещенных в него элементов, часть данных будет потеряна. • Примеры Re. Dim Товар(1 To 3) As String * 15 Re. Dim Preserve Товар(1 To 10) As String * 15 • При использовании параметра Preserve можно изменить размер только последней размерности, а количество размерностей изменить нельзя. 47
Переменные: динамические массивы • Массивы типа Variant можно создавать и заполнять одновременно при помощи встроенной функции Array(<Список. Значений>), например: Dim Товар As Variant Товар = Array(“Стул”, “Стол”, “Шкаф”) • Освободить память, занимаемую элементами динамического массива, и повторно инициализировать элементы массива фиксированной длины можно инструкцией Erase: Erase Список. Массивов • Здесь Список. Массивов – один массив или список разделенных запятыми массивов. 48
Переменные: динамические массивы Инициализация элементов массива фиксированной длины осуществляется следующим образом: Тип массива Фиксированный числовой массив Действие инструкции Erase Устанавливает каждый элемент в нуль. Устанавливает каждый элемент на нулевую длину строки (""). Устанавливает каждый элемент в нуль. Устанавливает каждый элемент в Empty Устанавливает каждый элемент, как будто это отдельная переменная. Устанавливает каждый элемент в величину Nothing. Фиксированный массив строк (переменной длины) Фиксированный массив строк (фиксированной длины) Фиксированный массив типа Variant Массив данных определенных пользователем типов Массив объектов 49
Переменные: динамические массивы • Если количество элементов в динамическом массиве не известно, то для его определения используется функция UBound (Имя. Массива [, Измерение]) • Необязательный параметр Измерение имеет тип Variant или Long. • Это целое число, указывающее размерность, для которой определяется верхняя граница индекса. • Для первой размерности используется число 1, для второй – 2 и т. д. если аргумент не указывается, по умолчанию используется значение 1. 50
Переменные: динамические массивы • • Пример Dim Товар(1 To 3) As String * 15 L=UBound (Товар) • Переменная L получит значение 3. • Функция UBound обычно используется с функцией LBound для определения размера массива, позволяющей найти наименьшее значение индекса указанной размерности. • Формат функции: LBound (Имя. Массива [, Измерение]) 51
Переменные: динамические массивы • В объектных моделях приложений Office наряду с массивами используются коллекции. • Коллекции — это специальные объекты, которые предназначены для хранения наборов одинаковых элементов. • Коллекции обычно удобнее, чем массивы; они изначально безразмерны и в них предусмотрен стандартный набор свойств и методов. 52
Переменные: пользовательские типы данных • VBA позволяет создавать структурные, так называемые пользовательские типы данных. • Например, если нужно обрабатывать сведения о результатах экзаменационной сессии, то можно создать пользовательский тип данных с названием Успеваемость. Type Успеваемость ФИО As String * 20 №_Зач_кн As String * 8 Дисциплина As String * 20 Оценка As String * 20 End Type • Примечание 1. Пользовательский тип данных определяется вверху модуля, в процедуре которой он используется, перед началом введения кода процедуры. 53
Переменные: пользовательские типы данных • Если пользовательский тип данных создан, то для объявления переменной этого типа следует применить инструкцию Dim. • Пример Sub Пользоват_Тип() Dim Студенты As Успеваемость Студенты. ФИО = Input. Box("Введите ФИО") ‘ввод с клавиатуры ФИО Студенты. №_Зач_кн = Input. Box("№_Зач_кн") ‘ввод №_Зач_кн Студенты. Дисциплина = Input. Box("Дисциплина") ‘ввод Дисциплина Студенты. Оценка = Input. Box("Оценка") ‘ввод Оценка Msg. Box Студенты. ФИО & Студенты. №_Зач_кн & _ Студенты. Дисциплина & Студенты. Оценка End Sub 54
Переменные: пользовательские типы данных • В инструкции Dim переменную можно объявить с тем же именем, какое определено в пользовательском типе данных. В этом случае приведённый выше пример будет иметь вид: Sub Пользоват_ТИП() Dim Успеваемость As Успеваемость. ФИО = Input. Box("Введите ФИО") Успеваемость. №_Зач_кн = Input. Box("№_Зач_кн") Успеваемость. Дисциплина = Input. Box("Дисциплина") Успеваемость. Оценка = Input. Box("Оценка") Msg. Box Успеваемость. ФИО & Успеваемость. №_Зач_кн & _ Успеваемость. Дисциплина & Успеваемость. Оценка End Sub 55
Переменные: пользовательские типы данных • Как правило, пользовательский тип данных определяется для массивов, например, так: Dim Студенты (1 to 40) As Успеваемость • Все 40 элементов этого массива состоят из четырёх компонентов, как это указано в пользовательском типе данных Успеваемость. На конкретный элемент массива, например, первый можно сослаться следующим образом. Студенты(1). ФИО = Input. Box("Введите ФИО") Студенты(1). №_Зач_кн = Input. Box("Введите №_Зач_кн") Студенты(1). Дисциплина = Input. Box ("Введите Дисциплина") Студенты(1). Оценка= Input. Box ("Введите Оценка") 56
Операции VBA • В программах на VBA можно использовать стандартный набор операций над данными. Имеются три основных типа операций: • математические, • отношения, • логические. 57
Операции VBA: математические операции [Операнд 1] + [Операнд 2] [ Операнд 1] -- [Операнд 2] -- - [Операнд] - [Операнд 1] * [Операнд 2] * [Операнд 1] / [Операнд 2] [Операнд 1] [Операнд 2] [Операнд 1] Mod [Операнд 2] [Операнд 1] ^ [Операнд 2] Сложение Вычитание Перемена знака Умножение Деление Целочисленное деление Остаток модулю от деления Возведение в степень 58 по
Операции VBA: операции отношения [Операнд 1] < [Операнд 2] [Операнд 1] > [Операнд 2] [Операнд 1] <= [Операнд 2] [Операнд 1] >= [Операнд 2] [Операнд 1] <> [Операнд 2] [Операнд 1] = [Операнд 2] [Операнд 1] Is [Операнд 2] Меньше Больше Меньше или равно Больше или равно Не равно Равно Сравнение двух операндов, содержащих ссылки на объекты [Операнд 1] Like [Операнд 2] Сравнение двух строковых выражений 59
Операции VBA: логические и строковые операции [Операнд 1] And [Операнд 2] [Операнд 1] Or [Операнд 2] [Операнд 1] Хог [Операнд 2] [Операнд 1] Not [Операнд 2] [Строка 1] & [Строка 2] Логическое умножение Логическое сложение Исключающее or (или) Логическое отрицание Сложение (объединение) строк 60
Операции VBA: приоритеты операций Приоритет 1 2 3 4 5 6 7 8 9 10 11 12 Операция Вызов функции и скобки ^ – (смена знака) *, / Mod +, – >, <, >=, <=, = Not And Or Xor 61
Программирование в Excel строится на языке VBA и объектной модели Excel. Приложение Excel состоит из объектов, функциональные возможности которых можно использовать в программах, написанных на языке VBA. Совокупность объектов Excel называется объектной моделью Excel. ОБЪЕКТНАЯ МОДЕЛЬ EXCEL 62
Свойства и методы объектов • Объект инкапсулирует (объединяет в себе) его свойства и методы, которые доступны из программы, составленной на VBA. • Свойство – это совокупность характеристик и атрибутов, описывающих объект. С помощью свойств можно задать , например, цвет, значение, шрифт или формат диапазона ячеек. Одни свойства доступны только для чтения, а другие доступны как для чтения, так и для записи (изменения). • Метод представляет собой действия, выполняемые объектом. Например, метод Clear (Очистить) объекта Range (Диапазон) удаляет содержимое ячеек диапазона. Методы могут принимать значения параметров, уточняющие характер действия, которое необходимо выполнить. 63
Объектная модель Excel Объектная модель описывает объекты приложения и связи между ними. В объектной модели Excel представлено более 100 объектов. Для отображения всех объектов Excel нужно выполнить следующие действия: Открыть новую рабочую книгу. Нажать комбинацию клавиш <Alt+F 11>, чтобы открыть редактор Visual Basic. На вкладке Введите вопрос ответов ввести текст: Microsoft Excel Objects. Нажать клавишу <Enter> и в списке тем щелкнуть на теме Microsoft Excel Object. Отобразится диаграмма объектной модели (смотри рис. ). 64
Объектная модель Worksheet (Рабочий лист) Щелкнуть на стрелке, направленной влево, над строкой Microsoft Excel Objects (стрелка окрасится в голубой цвет). Отобразятся объекты уровня рабочего листа (смотри рис. ). 65
Отображение объектной модели Excel Среди более 100 объектов Excel в программировании на VBA большей частью используются следующие: • Application (Приложение) • Work. Book (Рабочая книга) • Worksheet (Рабочий лист) • Range (Диапазон) • Chart (Диаграмма) Объект Application представляет саму программу Excel. Объект Work. Book представляет рабочую книгу Excel, т. е. файл Excel. Объект Worksheet (Рабочий лист) отдельная страница в рабочей книге, имеющая индивидуальное имя и предназначенная для хранения данных и выполнения вычислений. Рабочий лист в свою очередь состоит из ячеек. Ячейки представляет объект Range, который может состоять из одной или нескольких ячеек. Одним из часто используемых объектов является объект Chart (Диаграмма). 66
Иерархия объектной модели • На вершине объектная модель Excel находится объект Application. • Под этим объектом расположены другие объекты, среди которых находится Work. Book. В терминологии объектно ориентированного программирования такое подчинение одного объекта другому называется вложением, т. е. объект Work. Book вложен в объект Application, а объект Worksheet в объект Work. Book. 67
Ссылка на объекты в коде VBA Для полного определения объекта необходимо указать последовательно все уровни иерархии объектной модели. Например, чтобы сослаться на ячейку А 1 на рабочем листе Лист1 рабочей книги Книга 1, надо применить следующий код: Application. Workbooks("Книга 1"). Worksheets("Лист1"). Range("A 1") Если в программе нет ссылки на другое активное приложение, то объект Application можно не указывать, и предыдущая ссылка может быть представлена так: Workbooks("Книга 1"). Worksheets("Лист1"). Range("A 1") И т. д. 68
Работа с объектами Работа с любым объектом заключается в следующем: • задание свойств объекта; • получение значений свойств объекта; • выполнение методов объекта. 69
Задание свойств объекта 1) Range("A 1"). Value = 10 Range("B 1"). Value = “Товар” 2) Dim Sng. Value As Single Sng. Value = Range("A 1"). Value 3) Msg. Box "Ячейка B 1 содержит значение " & Range("B 1"). Value или Msg. Box "Ячейка B 1 содержит_ значение " & Sng. Value Задание значения свойству объекта имеет следующий формат: • Объект. Имя. Свойства = Значение Объект обозначает имя объекта, а Имя. Свойства соответственно имя свойства, которому присваивается значение. Имя объекта отделяется от имени свойства точкой. Например, чтобы определить свойство Value (Значение) объекта Range , т. е. поместить в ячейку A 1 значение 10, а в ячейку B 1 значение Товар, применяются следующие инструкции 1. Чтобы получить значение свойства объекта, используется формат: • Имя. Переменной = Объект. Имя. Свойства Такой код применяется для присвоения переменной значения свойства объекта или свойству другого объекта. Если надо присвоить переменной значение свойства Value объекта Range, т. е. переменная принимает значение из ячейки рабочего листа, используются следующие инструкции: 2. Для вывода на экран значения, содержащегося в ячейке B 1, можно использовать одну из следующих инструкций: 3. 70
Использование методов объекта Примеры В этом примере удаляются формулы и форматирование ячеек A 1: G 37 на листе Лист1. Worksheets("Лист1"). Range("A 1: G 37"). Clear В следующем примере очищается область диаграммы Диаграмма 1 (объект Chart. Area; удаляются данные и форматирование диаграммы). Charts("Диаграмма 1"). Chart. Area. Clear Например, для выполнения метода Open (Открыть) рабочей книги Примеры следует записать код Workbooks("Примеры"). Open Некоторые методы имеют аргументы, обязательные или необязательные. В следующем примере метод Save. As (Сохранить), применяемый для сохранения текущей рабочей книги, в качестве аргумента использует имя файла, в котором будет сохранена рабочая книга. This. Workbook. Save. As Filename: = "Текущий бюджет" Для выполнения метода объекта применяется один из следующих форматов: • Имя. Объекта. Имя. Метода Аргумент1, Аргумент2, …, Аргумент. N • Имя. Объекта. Имя. Метода (Аргумент1, Аргумент2, …, Аргумент. N) Это означает, что: • метод может не иметь Аргументов или все они не обязательные; • метод может иметь несколько Аргументов, не заключаемых в круглые скобки; • метод иметь несколько Аргументов, заключаемых в круглые скобки. Кроме того, аргументы могут быть неименованными и именованными, обязательными и необязательными. Значения неименованных аргументов должны быть перечислены в заданном порядке, определяемом форматом метода, отделяя каждый аргумент запятой и включая запятые на месте пропущенного необязательного аргумента. Именованные аргументы имеют формат • Наименование. Аргумента : = Значение. Аргумента Второй способ передачи значений параметров при вызове метода отличается от первого лишь отсутствием круглых скобок: • Имя. Объекта. Имя. Метода аргумент!, аргумент2, . . . 71
Переменные-объекты Переменными объектами называются переменные, имеющие тип Object. Переменные объекты объявляются точно так же, как переменные других типов, т. е. с помощью оператора Dim, используя при этом общий тип данных Object, или с помощью оператора Set, назначив переменным объектам тип конкретного объекта. После назначения переменным объектам конкретных объектов имена переменных объектов можно использовать в кодах процедур вместо имен самих объектов. В результате выполнения этой процедуры шрифт в ячейках рабочего листа Лист1 будет отформатирован как жирный(Bold) курсив(Italic) тип Courier. Например, слово “шрифт” будет иметь вид “шрифт”. Примеры объявления переменных объектов: Dim Таблица 1 As Object Dim Продажи As Worksheet Dim Книга 1 As Workbook Dim Курс As Range Set Лист1 = Workbooks("Финансы"). _ Worksheets("Бюджет") Set Лист2 = Workbooks("Финансы "). _ Worksheets("Бюджет") Set Книга 1 = Workbooks("Финансы") Set Таблица 1=Workbooks("Бюджет"). _ Worksheets(1). Range("A 1: A 12") Пример использования в кодах процедур: Sub Объектs() Dim Раб. Обл As Range Set Раб. Обл = Workbooks("Финансы "). _ Worksheets("Лист1"). Range("A 2: D 2") Раб. Обл. Font. Bold = True Раб. Обл. Font. Italic = True Раб. Обл. Font. Name = "Courier" End Sub 72
Коллекции Коллекцией называется группа подобных объектов. Рассмотрим следующее полное имя объекта: Workbooks("Финансы "). Worksheets("Лист1"). _ Range("A 2: D 2") Здесь Workbooks и Worksheets это коллекции, Книra 1 – это элемент коллекции Workbooks. Объект Range не является коллекцией. Одно из определяющих свойств коллекции – возможность добавлять в нее новые элементы. В объект Range нельзя добавить другие диапазоны ячеек, так как в Excel диапазоны жестко определены и ограничены еще во время их задания. 73
Метод Add В коллекции можно добавлять новые элементы. Для этого используется метод Add (Добавить). Например, новую рабочую книгу можно создать с помощью следующего кода: Workbooks. Add Этот код эквивалентен выполнению в Excel команды Файл | Создать. Чтобы добавить новый лист в рабочую книгу, используется код Worksheets. Add 74
Свойство Count Свойство коллекции Count (Счет) хранит количество элементов, составляющих коллекцию. Для определения количества листов в текущей рабочей книге можно использовать следующие инструкции: Dim Кол. Раб. Лист As Integer Кол. Раб. Лист = Worksheets. _ Count С помощью свойства Count можно проверить, сколько содержит рабочая книга рабочих листов. Код процедуры представлен ниже: Sub Кол. Раб. Лист () Dim Кол. РЛ As Byte Dim Сообщ As String Кол. РЛ = Worksheets. Count Сообщ = "Книга содержит " & _ Кол. РЛ Сообщ = Сообщ & " листов " Msg. Box Сообщ End Sub 75
Свойства и методы основных объектов Excel: Объект Application • Объект Application (Приложение) занимает самый верхний уровень иерархии объектов Excel и управляет установками и параметрами уровня приложения, т. е. такими, которые можно найти в диалоговом окне Параметры программы Excel. • Объект Application содержит также встроенные функции Excel, и его необходимо использовать для применения в процедуре VBA встроенных функций Excel. 76
Свойства и методы основных объектов Excel: Объект Application имеет множество свойств и методов. Из свойств выделим следующие. • Active. Workbook – возвращает активную (текущую) книгу. • Active. Sheet – возвращает активный лист в активной рабочей книге. Возвращаемый лист может быть любого поддерживаемого типа, включая рабочий лист и лист диаграмм. • Active. Cell – возвращает активную ячейку на активном листе активной рабочей книги. • This. Workbook – возвращает рабочую книгу, где находится выполняемая процедура. • Selection – определяет текущее выделение. Выделением может быть диапазон ячеек, элементы диаграммы и т. п. • Среди методов объекта Application выделим следующие. • Input. Box – отображает окно ввода и позволяет указать тип возвращаемого значения. • On. Key – устанавливает выполнение указанной процедуры при нажатии заданной комбинации клавиш. • On. Time – назначает выполнение указанной процедуры на определённое время. • Quit – применяется для выхода из Excel 77
Свойства и методы основных объектов Excel: Объект Application Пример: В процедуре Мод. Функции моделируются функции Excel Average (Среднее) и Sum (Сумма). Option Base 1 Sub Мод. Функции() Dim Число As Variant Число = Array(10, 20, 30, 40) Dim Ср. Знач As Integer Ср. Знач = Application. Average(Число) Msg. Box "Среднее значение массива = " & Ср. Знач Msg. Box "Сумма значений массива = " & Application. Sum(Число) End Sub • В процедуре Мод. Функции для подсчёта среднего значения и суммы используются функции VBA Excel Average и Sum, параметром которых является массив Число, значения которого задаются при помощи функции VBA Excel Array. 78
Свойства и методы основных объектов Excel: Методы Объект Workbook : Методы объекта Workbook (более 40) 1. Activate делает активной указанную Activate рабочую книгу. Формат метода: Workbooks(“Имя. Файла”). Activate Метод не имеет аргументов. Пример Workbooks("Продажи. XLS"). Activate 79
Свойства и методы основных объектов Excel: Методы Объект Workbook : Методы объекта Workbook 2. Close закрывает рабочую книгу. Формат метода: Workbooks(“Имя. Файла”). Close(Save. Changes, Filename, Route. Workbook) Все параметры являются необязательными. Параметр Save. Changes может иметь значения True или False; в первом случае при закрытии файла изменения сохраняются, а во втором – нет. Параметр Filename задаёт новое имя закрываемому файлу. Route. Workbook посылает файл следующему получателю. Пример Workbooks("Продажи. XLS"). Close Save. Changes: = True, _ Filename: = "Продажи 2. XLS" В данном примере используются именованные аргументы метода. При использовании такого формата круглые скобки опускаются, и параметры могут следовать в любом порядке. В результате выполнения инструкции файл Продажи. XLS закрывается с именем Продажи 2. XLS, и изменения в файле сохраняются. 80
Свойства и методы основных объектов Excel: Методы Объект Workbook : Методы объекта Workbook 3. Save – сохраняет рабочую книгу под тем же именем. Формат метода: Workbooks(“Имя. Файла”) | Active. Workbook. Save Пример Active. Workbook. Save 4. Save. As – сохраняет рабочую книгу. Отличие этого метода от метода Save заключается в том, что метод Save. As имеет ряд необязательных параметров, таких как Filename (Имя файла), Password (Пароль), Write. Res. Password (Пароль на запись), Read. Only. Recommendec (Рекомендовать режим "только для чтения"). Формат этого метода аналогичен формату метода Save. Пример ‘Объявляется переменная-объект Новая. Книга Dim Новая. Книга As Workbook 'Переменной-объекту методом Add назначается новая создаваемая пустая рабочая книга Set Новая. Книга = Workbooks. Add ‘Рабочая книга сохраняется с именем “Продажи 2” методом Save. As и закрывается _ методом Close Новая. Книга. Save. As “Продажи 2” Новая. Книга. Close 81
Свойства и методы основных объектов Excel: Методы Объект Workbook : Методы объекта Workbook 5. Protect – защищает рабочую книгу паролем от внесения в неё изменений. Формат метода: Protect(Password, Structure, Windows) Параметры метода: Password – необязательный параметр, задающий пароль для защиты книги. Если параметр опущен, то книга защищается без пароля; Structure – необязательный параметр, устанавливающий, защищена ли структура книги, т. е. взаимное расположение листов; Windows – необязательный параметр, устанавливающий, защищены ли окна книги. 82
Свойства и методы основных объектов Excel: Методы Объект Workbook : Методы объекта Workbook 6. Unprotect – снимает защиту рабочей книги. Формат метода: Unprotect(Password) Параметр метода: Password – необязательный параметр, задающий пароль для защиты книги. Пример This. Workbook. Protect Password: =“defensa”, _ Structure: =True, Windows: = True This. Workbook. Password: =“defensa” В первом инструкции активная рабочая книга защищается паролем “defensa” и защищаются структура и окна книги, а во второй снимается защита книги. 83
Свойства и методы основных объектов Excel: Свойства Объект Workbook : Свойства объекта Workbook 1. Active. Sheet – возврfвращает активный лист рабочей книги. Пример ‘Рабочий лист получает имя “Экзамен” Active. Sheet. Name=“Экзамен” 2. Saved – возвращает значение True, если книга была сохранена после внесения в нее последних изменений. В противном случае возвращается значение False. Пример В этом примере выдаётся сообщение на экран, если активная рабочая книга содержит несохранённые изменения. В примере используется условный оператор If; в дальнейшем будет приведено его подробное описание. If Not Active. Workbook. Saved Then Msg. Box "Эта рабочая книга содержит несохранённые изменения" End If 3. Path – возвращает путь к книге Пример Msg. Box "Путь " & Active. Workbook. Path 84
Свойства и методы основных объектов Excel: Свойства Объект Worksheet : Свойства объекта Worksheet Объект Worksheet представляет собой рабочий лист. 1. Cells – возвращает ячейку рабочего листа. Формат свойства: Worksheets(индекс). Cells(<№ строки>, <№ столбца>), где индекс – номер или имя рабочего листа, <№ строки>, <№ столбца> – целочисленные выражения, задающие значения № строки и № столбца рабочего листа. Пример ‘Ячейка, находящаяся в строке 2 в столбце 5 (ячейка E 5) листа Лист1, получает значение 10. i=1 k=5 Worksheets(Лист1). Cells(i*2+1, k). Value=10 2. Name – возвращает имя рабочего листа. Формат свойства: Active. Sheet. Name = < имя рабочего листа> Пример ‘Активный рабочий лист получает имя “Товары” Active. Sheet. Name =“Товары” 85
Свойства и методы основных объектов Excel: Методы Объект Worksheet : Методы объекта Worksheet При работе с объектом Worksheet часто применяются следующие методы: Activate – активизирует рабочий лист; Add – вставляет новый лист в рабочую книгу; Check. Spelling – используется для проверки орфографии содержимого рабочего листа; Delete – удаляет рабочий лист из рабочей книги. Пример В приведённом ниже коде объявляется переменная объект Новый. Лист, которой затем назначается создаваемый рабочий лист с именем Склад. Dim Новый. Лист As Worksheet Set Новый. Лист = Worksheets. Add Новый. Лист. Name = “Склад” 86
Свойства и методы основных объектов Excel: Объект Range В VBA ячейки рабочего листа трактуются как объект Range. В качестве объекта Range могут выступать: • отдельная ячейка; • выделенный диапазон ячеек; • несколько выделенных диапазонов ячеек (т. е. совокупность несмежных диапазонов); • строка и столбец; • трехмерный диапазон (т. е. состоящий из диапазонов, расположенных на разных рабочих листах). 87
Свойства и методы основных объектов Excel: Свойства Объект Range. Свойства объекта Range. Из множества свойств объекта Range, которых у него несколько десятков, рассмотрим следующие, наиболее часто используемые. • Address (Адрес) возвращает текущее положение диапазона. • Count (Счет) возвращает количество ячеек в диапазоне. • Formula (Формула) возвращает формулу, по которой вычисляется значение, отображаемое в ячейке. • Offset (Смещение) возвращает величину смещения одного диапазона относительно другого. • Resize (Изменение размеров) позволяет изменять текущее выделение диапазона. • Value (Значение) возвращает значения ячеек, составляющих диапазон. 88
Свойства и методы основных объектов Excel: Свойства Объект Range. Свойства объекта Range. Пример На листе Лист1 в ячейке B 4 находится число 4 и в ячейке A 1 – формула =B 4. В модуле Module 1 хранится процедура Свойства. Диапазона: Sub Свойства. Диапазона() Worksheets("Лист1"). Range("A 1: B 2"). Activate Msg. Box "Количество ячеек в диапазоне " &_ Range("A 1: B 2"). Count Msg. Box "Текущая ячейка " & Active. Cell. Address Active. Cell. Offset(2, 2). Activate Msg. Box "Текущая ячейка " & Active. Cell. Address Range("A 1"). Formula = "=B 4" Msg. Box "Формула в ячейке A 1 " & Range("A 1"). Formula Msg. Box "Значение ячейки A 1= " & Range("A 1"). Value End Sub 89
Свойства и методы основных объектов Excel: Свойства Объект Range. Свойства объекта Range. Инструкция Range("A 1: B 2"). Activate выделяет диапазон A 1: B 2 рабочего листа Лист1 при помощи метода Activate. Функции Msg. Box "Количество ячеек в диапазоне " & Range("A 1: B 2"). Count Msg. Box "Текущая ячейка " & Active. Cell. Address выводят при помощи свойств Count и Address количество ячеек в выделенном блоке и адрес текущей ячейки: Текущая ячейка получила адрес $C&3 в результате выполнения инструкции Active. Cell. Offset(2, 2). Activate свойство которой Offset(2, 2) задаёт смещение на две ячейки относительно ячейки A 1. 90
Свойства и методы основных объектов Excel: Свойства Объект Range. Свойства объекта Range. Инструкция Range("A 1"). Formula = "=B 4" Помещает формулу =B 4 в ячейку A 1. Функции Msg. Box "Формула в ячейке A 1 " & Range("A 1"). Formula Msg. Box "Значение ячейки A 1= " & Range("A 1"). Value выводят на экран соответственно формулу и значение ячейки A 1: Другими словами, свойство Value возвращает то, что отображается в ячейке, а свойство Formula то, что находится в ячейке. 91
Свойства и методы основных объектов Excel: Методы Объект Range. Методы объекта Range. Из множества методов объекта Range, которых у него небольше двадцати, следующие, наиболее часто используемые. Activate – активизирует диапазон. Clear, Clear. Comments, Clear. Contents, Clear. Formats, Clear. Notes – очищает содержимое диапазона, позволяют убрать комментарии, содержимое ячеек, форматы и примечания. Сору – копирует содержимое диапазона в буфер обмена. Cut – перемещает содержимое диапазона в буфер обмена. Delete – удаляет диапазон. Select – выделяет диапазон. При удалении (метод Delete) ячейки, находящиеся рядом с уничтоженными, сдвигаются на место уничтоженных: влево, если используется параметр xl. Shift. To. Left, и вверх, если используется параметр xl. Shift. Up. При очистке (метод Clear) удаляется содержимое ячеек, форматы и комментарии, но сами пустые ячейки остаются. Метод Сору используется для копирования диапазона в Буфер обмена и при использовании параметра destination – в другой диапазон. 92
Свойства и методы основных объектов Excel: Методы Объект Range. Методы объекта Range. Пример В приведённом ниже примере диапазон ячеек A 1: B 1 листа Лист1 копируется в диапазон ячеек A 1: B 1 листа Лист2. Worksheets("Лист1"). Select Worksheets("Лист1"). Range("A 1: B 1"). Activate Worksheets("Лист1"). Range("A 1: B 1"). Copy _ destination: =Worksheets("Лист2"). Range("A 1: B 1") 93
Просмотр объектов Окно просмотра объектов Object Browser позволяет просматривать все объекты проекта. Здесь имеются все свойства, методы и события, связанные с любым объектом. Доступ к этому окну можно получить следующими способами. • Щелкнуть на кнопке Object Browser стандартной панели инструментов редактора Visual Basic. • Выполнить команду View > Object Browser (Вид > Просмотр объектов). • Нажать клавишу F 2. 94
Просмотр объектов Опишем работу в окне Object Browser. • Нажать клавишу F 2 для открытия окна Object Browser (см. рис. ). • Выбрать в Activate Method пункт Activate method as it applies to the Range object • Выбрать в Example пункт As it applies to the Range object (см. рис. ) • Закрыть окно справочной системы. • Закрыть окно Object Browser. 95
Использование справочной системы: клавиша F 1 Этот способ даёт возможность получить справку по всем объектам и ключевым словам VBA. • В качестве примера рассмотрим получения сведений о функции Array. • Войти в редактор Visual Basic. Это можно сделать двумя способами: щёлкнуть по кнопке Редактор Visual Basic или одновременно нажать на клавиши Alt и F 11. • Если в окне Project – VBAProject нет ни одного модуля, вставить модуль в текущую рабочую книгу. Для этого в окне Microsoft Visual Basic выбрать пункт меню Insert и в выпадающем окне – пункт Module. • В окне кода редактора Visual Basic ввести символ Одиночная кавычка (‘), а за ней – слово array. • Установить текстовый курсор внутри слова 'Array • Нажать клавишу F 1. Появится справка. 96
Использование справочной системы: использование помощника Этот способ даёт возможность получить справку только по объектам VBA и их свойствам, методам и событиям. Находясь в окне Microsoft Visual Basic, следует выбрать пункт меню Help, и в приведённом ниже выпадающем меню (*) выбрать пункт “Справка: Microsoft Visual Basic”, в результате чего появится “Помощник”, который предложит ввести вопрос к справочной системе. (**) Ввести вопрос What add the new worksheet в окне помощника и в появившемся диалоговом окне выбирать пункт Worksheets Property. (***) На экран будет выведена справка Worksheets Property по свойству Add для рабочего листа. 97
Ввод сообщений и вывод данных Рассматриваются следующие вывода сообщений на экран дисплея и средства ввода данных с клавиатуры при помощи диалоговых окон: • использование функции Msg. Box; • использование функции Input. Box; • применение метода Input. Box; • именование аргументов, • использование объединения текстовых строк. 98
Ввод сообщений и вывод данных: функция Msg. Box Функция Msg. Box служит для организации диалоговых окон, содержащих какие либо сообщения. Функция Msg. Box имеет следующий формат: Msg. Box (Prompt [, Buttons] [, Title] [, Helpfile, Context]) Аргументы рассматриваемой функции означают следующее: Prompt (Приглашение) обязательный аргумент этой функции. Значением этого аргумента служит строка текста, которая появляется как сообщение в диалоговом окне. Эта строка текста должна быть заключена в двойные кавычки. Круглые скобки в синтаксисе Msg. Box указывают на то, что в данном случае Msg. Box является функцией, возвращающей какое либо значение. Если скобки опущены, то для VBA это признак того, что данное выражение значение не возвращает и результатом выполнения инструкции Msg. Box является только вывод диалогового окна. 99
Ввод сообщений и вывод данных: функция Msg. Box Buttons (Кнопки) – числовое выражение, представляющее сумму значений, которые указывают число и тип отображаемых кнопок, тип используемого значка, основную кнопку и способ, каким используется окно сообщения; аргумент необязателен. Значение по умолчанию этого аргумента равняется 0; его можно задать в виде констант VBA или целым числом. Если не указан аргумент Кнопки, то VBA предполагает, что в диалоговом окне сообщения присутствует только кнопка ОК. Аргумент Кнопки позволяет управлять следующими параметрами окна сообщения: • количество кнопок в окне; • типы кнопок и их размещение в окне; • пиктограмма, отображаемая в окне; • какая кнопка назначается кнопкой по умолчанию; • режим окна сообщения. (Значения аргументов см. в учебнике) 100
Ввод сообщений и вывод данных: функция Msg. Box При написании программ, в которых в зависимости от нажатой кнопки диалогового окна необходимо выполнить определённое действие, вместо возвращаемых числовых значений удобнее использовать следующие константы VBA (см. табл. ) • Чтобы не ошибиться при вводе значений аргумента кнопки, используйте список констант, который появляется после ввода знака "+". Знак "+" используется для объединения нескольких констант при задании сложного аргумента кнопки. Например, использование в процедуре выражения vb. Yes. No. Cancel + vb. Question + b. Default. Button 1 • приведёт к появлению кнопок Да, Нет и Отмена (константа vb. Yes. No. Cancel), значка (константа vb. Question) и по умолчанию к использованию первой кнопки (константа vb. Default. Button 1). Нажатая кнопка OK Константа vb. OK 1 vb. Cancel 2 vb. Abort 3 vb. Retry 4 vb. Ignore 5 vb. Yes 6 Отмена (Cancel) Прервать (Abort) Повторить (Retry) Пропустить (Ignore) Да (Yes) vb. No 101 Значение 7 Нет (No)
Ввод сообщений и вывод данных: функция Msg. Box Title (Заголовок) – содержит заголовок окна сообщения; аргумент необязательный. Без этого аргумента в заголовке будет выведено имя приложения MS Office, из которого запускается программа на VBA (Excel, Word и т. д. ). Helpfile (Справка) – строковое выражение, содержащее имя справочного файла Windows. Обычно это файл, созданный разработчиком приложения с помощью Windows Help Compiler. Context (Раздел) – численное выражение, указывающее раздел в справочном файле, относящийся к отображаемому диалоговому окну. Аргументы Helpfile и Context не обязательны. Они используются или опускаются вместе. Аргументы функции необходимо перечислять в том порядке, в каком они размещены в её формате. Следовательно, в функции Msg. Box они должны располагаться следующим образом: Prompt [, Buttons] [, Title] [, Helpfile, Context]) Если какой либо аргумент опущен, то необходимо включать в список аргументов отмечающие запятые для следующего в списке аргумента. 102
Ввод сообщений и вывод данных: функция Msg. Box Пример В приведённой ниже процедуре Функция. Msg. Box() функция Msg. Box используется для: • определения, какая из кнопок: Да, Нет или Отмена – нажата (щёлкнута) в диалоговом окне этой функции; • вывода на экран сообщения, какая кнопка была нажата и наименование примера использования этой функции. Внутренняя константа vb. Exclamation используется в процедуре для вывода в окне сообщения символа . Определение значения нажатой кнопки осуществляется при помощи инструкции If…Then…Else, синтаксис которой будет подробно рассмотрен в дальнейшем. • Sub Функция. Msg. Box() • • Dim Структура As String Dim Кнопка As Integer ' ' В переменной Структура задается структура диалогового окна Структура = vb. Yes. No. Cancel + vb. Question + vb. Default. Button 1 ' В переменную Кнопка вводится целое число, возвращаемое Msg. Box 'при нажатии кнопки Да, Нет или Отмена в окне сообщения функции Msg. Box ' Кнопка = Msg. Box("Выбрать Да, Нет или Отмена? ", Структура, "Примеры функции Msg. Box") ' ' На экране отображается соответствующее сообщение ' ' в зависимости от значения переменной Кнопка ‘ Msg. Box "Равно " & Кнопка, , "Возвращаемое значение" If Кнопка = vb. Yes Then Msg. Box "Выбрано Да", vb. Exclamation, "ПРИМЕР 1" If Кнопка = vb. No Then Msg. Box "Выбрано Нет", vb. Exclamation, "ПРИМЕР 2" If Кнопка = vb. Cancel Then Msg. Box "Выбрано Отмена", vb. Exclamation, "ПРИМЕР 3" End Sub • • • • 103
Ввод сообщений и вывод данных: функция Input. Box Функцию Msg. Box целесообразно использовать в случае, если от пользователя надо получить типа Да–Нет или ОК–Отмена. Если необходимо ввести число или текст, то применяется функция Input. Box. Эта функция отображает запрос в диалоговом окне ввода, ожидает ввода пользователем строки (или щелчка по кнопке окна) и возвращает строку из поля ввода окна. Функция Input. Box имеет следующий формат: Input. Box(Prompt[, Title] [, Default] [, Xpos]_ [, Ypos] [, Helpfile, Context]) Эта функция требует обязательного задания только аргумента Prompt. Так же, как и в функции Msg. Box, значением аргумента Prompt служит текстовая строка, которая отображается в диалоговом окне ввода в качестве сообщения. Строковое значение prompt может содержать несколько строк. Для разделения строк допускается использование символа возврата каретки (Сhr(13)), символа перевода строки (Chr (10)) или комбинацию этих символов (Chr( 13) & Chr (10)). 104
Ввод сообщений и вывод данных: функция Input. Box Аргумент title используется для задания текста, который помещается в строке заголовка окна ввода. Если этот аргумент не задан, то в строке заголовка отображается слово Ввод. Аргумент default задает значение, которое отображается по умолчанию в поле ввода, пока пользователь не введет свое значение. Если этот аргумент опустить, то отображается пустое поле ввода. Необязательные аргументы xpos и ypos задают положение окна ввода на экране. • xpos – числовое выражение, задающее расстояние по горизонтали между левой границей диалогового окна и левым краем экрана. Если этот аргумент опущен, диалоговое окно выравнивается по центру экрана по горизонтали. • ypos – числовое выражение, задающее расстояние по вертикали между верхней границей диалогового окна и верхним краем экрана. Если этот аргумент опущен, диалоговое окно помещается по вертикали примерно на одну треть высоты экрана. Аргументы helpfile и context используются в том случае, если в приложении создаётся собственная система справки. Возвращаемым значением функции Input. Box является значение, введенное пользователем в поле ввода. 105
Ввод сообщений и вывод данных: метод Input. Box В Excel имеется еще один способ ввода данных пользователем в интерактивном режиме, который имеет называние метод Input. Box. Формат метода: Application. Input. Box(Prompt, Title, Defau lt, Left, Top, Help. File, Help. Context. Id, Type) Метод Input. Box является методом объекта Application, и поэтому здесь присутствует слово Application. Аргументы этого метода, кроме Type, такие же, как и у функции Input. Box. Основное отличие синтаксиса метода Input. Box от синтаксиса одноименной функции заключается в последнем аргументе Type. Необязательный аргумент Type позволяет явно указать тип возвращаемого значения. В приведённой ниже таблице содержатся значения, которые может принимать этот аргумент. Запятые в выражении Application. Input. Box указывают места пропущенных аргументов. Последний аргумент – Type имеет значение 1. Это показывает, что допустимыми вводимыми значениями являются только числа. Значение Возвращаемое значение 0 Формула 1 Число 2 Текст (строка) 4 Логические значения, такие как ИСТИНА и ЛОЖЬ 8 Ссылка на ячейку 16 Значение ошибки 64 Массив значений Пример Sub Пример() Dim Данное As Integer Данное = Application. Input. Box("Введите число: ", , , , 1) Msg. Box "Введённое данное равно " & Данное End Sub 106
Ввод сообщений и вывод данных: метод Input. Box Преимуществом метода Input. Box является возможность обнаружения ошибок при вводе данных. Например, если при выполнении процедуры Пример введено не число, то будет выведено следующее сообщение об ошибке: Можно суммировать значения аргумента Type. Например, если нужно, чтобы метод мог возвращать как текст, так и числа, следует сделать аргумент Type равным 3 (1 + 2). Если аргумент Type не задан, то метод Input. Box по умолчанию возвращает текст. Пример • Sub Функция. Input. Box 2() • Dim Данное As Variant • Данное = Application. Input. Box("Введите данное: ", , , , 3) • Msg. Box "Введённое данное равно " & Данное • End Sub Пропуск отмечающих запятых, а также перестановка аргументов функции приводит к ошибкам несовпадения типов. Для предотвращения ошибок программирования функций при вводе аргументов VBA предоставляет возможность передавать значения аргументов функции, используя именованные аргументы функций. 107
Ввод сообщений и вывод данных: метод Input. Box Процедура Пример2 иллюстрирует использование именованных аргументов функций Prompt, Title и Type; она решает ту же задачу, что и процедура Пример. • Sub Пример2() • Dim Данное As Integer • Данное = Application. Input. Box(Promp t: = "Введите число: ", _ • Title: ="Проверка типа данных", Type: =1) • Msg. Box Prompt : = "Введённое данное равно " & Данное, _ • Title: ="Проверка ввода данных" • End Sub Следует обратить внимание на то, что: • имя аргумента отделяется от его значения символом “: =” (двоеточие и равно); • порядок перечисления именованных аргументов не обязательно совпадает с их порядком в формате функции; • список аргументов функции Msg. Box не заключается в скобки; • в операторе Данное = Application. Input. Box … функция Input. Box используется как метод приложения Application, и поэтому её аргументы заключаются в скобки. 108
Ввод сообщений и вывод данных: объединение текстовых строк Если надо объединить несколько текстовых строк в одну, используется символ конкатенации &. Пример: • Sub Объединение. Строк() • Dim Имя As String • Dim Сообщение As String • Имя = Input. Box("Введите ваше имя: ") • 'Следующая строка для окна сообщения объединяет • 'слово "Привет" со значением переменной Имя • Msg. Box "Привет, " & Имя & "!" • Сообщение = "Это пример объединения нескольких" • Сообщение = Сообщение & " строк в одну большую" • Сообщение = Сообщение & " строку. " & vb. New. Line • Сообщение = Сообщение & "vb. New. Line константа, позволяющая" • Сообщение = Сообщение & " начинать новую строку" • Msg. Box Сообщение • End Sub 109
Инструкции VBA 110
Линейные вычислительные процессы (ЛВП) предполагают последовательное выполнение инструкций (операторов). В основе всех линейных вычислительных процессов лежит оператор присваивания. Оператор 1 Оператор 2 …. Блок схема ЛВП 111
Оператор присваивания – это инструкция VBA , выполняющая математическое вычисление и присваивающая результат переменной или объекту. Формат оператора: [Let] имя переменной или свойства = выражение Элемент Let необязателен. Примеры х = 1 x = x + 1 х = (у * 2) / (г * 2) Cells(1, 2). Value = "План выпуска" 112
Инструкция Set присваивает ссылку на объект переменной или свойству объекта. При этом переменной присваивается значение объектного выражения или значение, возвращаемое объектной функцией. Формат инструкции Set: Set объектная переменная = [ New] объектное выражение Nothing объектная_переменная – имя переменной или свойство, New – необязательеый; задает создание нового экземпляра класса, Объектное выражение – выражение, состоящее из имени объекта, переменной соответсвующего объектного типа, функции или метода, Nothing – разрывает связь элемента объектная переменная с каким либо определенным объектом. Пример Set Диапазон = Range(“A 1: А 10”) – переменной Диапазон присваивается диапазон A 1: А 10. 113
Циклические вычислительные процессы (Циклы) Циклы предназначены для многократного выполнения группы инструкций (операторов). В VBA для организации циклов используются инструкции For. . . Next, While…Wend, Do …Loop и For Each…Next. Организаци я цикла Инструкция или группа инструкций Блок-схема цикла -> 114
Инструкция For… Next Формат инструкции For Счетчик = Начало То Конец [Step Шаг] For То [Инструкции 1] [Exit For] [Инструкции 2] Next [Счётчик] Next Элемент инструкции Счетчик Начало Конец Шаг Инструкции Описание элемента Обязательный. Числовая переменная, используемая в качестве счётчика цикла Обязательный. Начальное значение для Счетчик Обязательный. Конечное значение для Счетчик Необязательный. Шаг изменения значения Счетчик после каждого цикла. По умолчанию используется значение 1 Необязательный. Один или более операторов, выполняемых определённое число раз 115
Пример инструкции For… Next В процедуре Test. For подсчитывается сумма нечётных чисел в заданном диапазоне, причём числа формируются в цикле с нарастанием на 1. Sub Test. For() 'Подсчёт суммы нечётных чисел в заданном диапазоне Dim i As Integer Dim n As Integer Dim Sum As Integer Dim r As Integer n = Input. Box("Ведите количество чисел", "Количество нечётных чисел") r = 0 For i = 1 To n Step 2 '(сумма нечётных чисел от 1 до n) Sum = Sum + i r = r + 1 Next i Msg. Box Prompt: ="Сумма " & r & " нечётных чисел в диапазоне от 1 до " & n & _ “ равна " & Sum, Buttons: =vb. Exclamation, _ Title: ="Количество нечётных чисел" End Sub 116 Диалоговые окна, появляющиеся при выполнении макроса Test. For.
Инструкция While…Wend выполняет некоторую последовательность инструкций до тех пор, пока заданное условие имеет значение True (Истина). Формат инструкции While…Wend While Условие [Инструкции] Wend Элемент инструкции Описание элемента Условие Обязательный. Числовое или строковое выражение, результатом вычисления которого являются значения True или False Инструкции Необязательный. Одна или более инструкций, выполняемых, если условие равно значению True 117
Пример Инструкции While…Wend Если Условие имеет значение True, то выполняется весь набор инструкций, распо ложенных до инструкции end. W После этого управление возвращается инструк ции hile и опять проверяется W условие. Если Условие имеет значение True, то сно ва выполняются все инструкции до Wend, В противном случае выполнение программы передается на инструкцию, следующую за инструкцией Wend. Sub TWW() 'Подсчёт суммы чётных чисел от 0 до 10. Dim k As Integer Dim i As Integer k = 0: i = 0 While k < 10 k = k + 1 i = i + 2 Wend Msg. Box "Сумма чётных чисел от 0 до 10 равна " & i End Sub Циклы While. . . Wend могут иметь любую глубину вложенности. При этом каждая инструкция Wend соответствует Результат выполнения процедуры TWW предшествующей инструкции While. В процедуре TWW осуществляется подсчёт суммы чётных чисел натурального ряда в пределах от 0 до 10. 118
Инструкция Do. . . Loop Существует два типа инструкции Формат инструкций : Формат1 Do…Loop: Do [{While | Until} условие] Do While и [инструкции] Do Until. [Exit Do] [инструкции] Первый из них повторяет Loop выполнение блока инструкции Формат2 до тех пор, пока заданное Do логическое условие истинно. [инструкции] Второй инструкция, Do Until, [Exit Do] выполняет циклические [инструкции] вычисления до тех пор, Loop [{While | Until} условие] пока изначально Элемент Описание элемента ложное логическое инструкции Условие Необязательный. Численное или строковое условие не станет выражение, имеющее значение True или False истинным. Инструкции Одна или более инструкций, которые повторяются, если условие равно значению True, или до тех пор, пока оно не станет равным True 119
Пример Инструкции Do. . . Loop Sub DWU() Dim s. Name As String Dim i. Response As Integer s. Name = "" Do While s. Name = "" s. Name = Input. Box("Введите свое имя: ") If s. Name = "" Then Msg. Box "Вы не ввели имя " i. Response = Msg. Box("Вы хотите выйти из_ программы? ", vb. Yes. No) End If If i. Response = vb. Yes Then Exit Sub Loop Msg. Box "Вы ввели имя " & s. Name End Sub Пример: В процедуре DWU пользователю предлагается ввести свое имя или выйти из программы. Здесь значение vb. Yes. No функции Msg. Box присваивается переменной i. Response, которое анализируется инструкцией If…Then…Else, и в случае равенства его внутренней константе vb. Yes (нажата кнопка Ok в диалоговом окне функции Msg. Box) и переменная s. Name имеет пустое значение, выдаётся сообщение "Вы не ввели имя", и происходит выход из процедуры по инструкции Exit Sub. (Инструкция If…Then…Else будет рассмотрена позже). Если же имя введено (даже пробел!), то произойдёт выход из цикла по условию s. Name <> "", и выводится диалоговое окно с введённым именем. При запуске процедуры DWU выводится окно, Если имя введено, то Если же имя не введено и нажата кнопка OK или Cancel, то 120
Инструкция For Each…Next Инструкция For Each применяется для выполнения одного и того же набора операторов для элемента массива или коллекции. Цикл For Each. . . Next Формат: похож на For. . . Next за исключением того, что он For Each элемент In группа повторно выполняет одну [Инструкции] и ту же группу операторов [Exit For] для каждого элемента набора объектов или [Инструкции] массива. Next Элемент инструкции Элемент Группа Инструкции Описание элемента Обязательный. Переменная, используемая для итерации по элементам коллекции или массива. Может быть только Variant-переменной. Обязательный. Имя коллекции объектов или массива. Необязательный. Один или более операторов, которые выполняются для каждого элемента в Группа 121
Разветвляющиеся вычислительные процессы (инструкции перехода) Инструкции перехода часто используются в языках программирования. В них проверяется соответствие каким то условиям и в зависимости от этого выполнение программы направляется по одной или другой ветви, или осуществляется безусловный переход в определённое место программы. В VBA предусмотрено две инструкции условного перехода: If… Then. . . Else Select Case и инструкция безусловного перехода Go. To. К этой группе инструкций также относятся: • инструкции On Error Go. To метка, On Error Resume Next и On Error Go. To 0, служащие для перехода к обработчику ошибок; • инструкция Resume, возобновляющая выполнение процедуры после того, как заканчивает работу процедура обработки ошибок; • инструкция Go. Sub…Return, которая передаёт и возвращает управление выполнением процедуры подпрограмме внутри процедуры; • инструкции On…Go. Sub и On…Go. To, предназначенные для передачи управления выполнением программы на одну из нескольких определённых строк программы в зависимости от значения некоторого параметра; • инструкции Exit Do, Exit For, Exit Function и Exit Sub, используемые для прерывания выполнения блока Do…Loop, For…Next, Function и Sub. 122
Блок-схема разветвляющегося вычислительного процессыа < УСЛОВИЕ > FALSE ИНСТРУКЦИЯ 1 (либо пустой оператор) TRUE ИНСТРУКЦИЯ 2 123
Инструкция условного перехода If…Then…Else Инструкция If. . . Then. . . Else задает выполнение определенных групп инструкций в зависимости от значения выражения. Она может иметь однострочный и два блоковых формата. • Однострочный формат: If условие Then инструкции • Первый блоковый формат: If условие Then [инструкции] [Else [инструкции_Else]] End If • Второй блоковый формат: If условие Then [инструкции] [Else. If условие Then [инструкции_else. If]]… [Else [инструкции_else]] End If При этом Else. If …Тhen может повторяться несколько раз. 124
Инструкция условного перехода If…Then…Else В основу этой инструкции положен следующий принцип: если условие выполняется, то выполняются инструкция, находящиеся после Then. Элемент инструкции Условие Инструкции Описание элемента Обязательный. Одно или более выражений следующих двух типов: численное или строковое выражение, которое приводится к значениям True или False. Необязательный в блочной форме, но обязательный в однострочной форме, которая не имеет ветви Else. Один или несколько операторов; выполняются, если Условие имеет значение True. Однострочная форма допускает выполнение нескольких инструкций в результате проверки одного условия If…Then. При этом все инструкции должны находиться на одной строке и разделяться двоеточием. 125
Пример инструкции условного перехода If…Then…Else Пример блоковой формы: Sub If. Then. Else () Dim a As Single Dim b As Single Dim c As Single a = Range("A 1"). Value b = Range("A 2"). Value If b = 0 Then Msg. Box_ "Деление _ невозможно!" Else c = a / b: Msg. Box "c=" & c End Sub If. Then. Else 1 () Dim a As Single Dim b As Single Dim c As Single a = Range("A 1"). Value b = Range("A 2"). Value If b=0 Then Msg. Box "Деление на ноль невозможно!" Else c = a / b Msg. Box "c=" & c End If End Sub 126
Примернение инструкции условного перехода If…Then…Else Инструкция If…Then. . . Else применяется в следующих случаях: • Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое то действие: Option Compare Text ––––––––––––––––––––––––– Sub If. Then. Else 2() Dim Курс. Раб As String If Range("a 5"). Value = "Неуд" Or Range("a 5"). Value = "" Then Msg. Box "Небходимо защитить курсовую работу " End If End Sub • Нужно проверить на соответствие одному или нескольким условиям и в случае соответствия сделать какое то действие, а в случае несоответствия выполнить другое действие: Sub If. Then. Else 3() Dim Курс. Раб As String If Range("a 5"). Value = "Неуд" Or Range("a 5"). Value = "" Then Msg. Box "Необходимо защитить курсовую работу" Else Msg. Box "К экзамену по информатике допущен" End If End Sub 127
Примечание: инструкции условного перехода If…Then…Else На уровне стандартного модуля, в котором находится процедура If. Then. Else 2, помещена инструкция Option Compare Text. Инструкция Option Compare применяется на уровне модуля перед первой процедурой модуля для задания используемого по умолчанию способа сравнения строковых данных. Формат инструкции: Option Compare Binary | Text | Database Инструкция Option Compare указывает способ сравнения строк Binary, Text или Database для модуля. Если модуль не содержит инструкцию Option Compare, то по умолчанию используется способ сравнения Binary. Инструкция Option Compare Binary задает сравнение строк на основе порядка сортировки, определяемого внутренним двоичным представлением символов. В Microsoft Windows порядок сортировки определяется кодовой страницей символов. В следующем примере представлен типичный результат двоичного порядка сортировки: A < B < E < Z < a < b < e < z < Б < Л < Ш < б < л < ш Инструкция Option Compare Text задает сравнение строк без учета регистра символов на основе системной национальной настройки. Тем же символам, что и выше, при сортировке с инструкцией Option Compare Text соответствует следующий порядок: (A=a) < (B=b) < (E=e) < (Z=z) < (Б=б) < (Л=л) < (Ш=ш) Инструкция Option Compare Database может использоваться только в Microsoft Access. 128
Инструкция Select…Case Инструкция Select Case выполняет одну из нескольких групп инструкций в зависимости от значения некоторого выражения. Формат: Элемент Описание элемента инструкции Select Case выражение Выражение Обязательный. Любое числовое или строковое выражение [Case список_выражений n Список_выражений-n Обязателен в случае использования Case. Список (сразделителями) из одной или более следующих форм: [инструкции n]] . . . выражение To выражение [Case Else Is оператор_сравнения выражение Ключевое слово To определяет диапазон значений, в [инструкции_еlsе]] котором меньшее значение должно быть перед ключевым словом To. End Select Инструкции-n Инструкции_еlsе Элемент инструкции 129 Ключевое слово Is следует использовать с операторами сравнения для указания диапазона значений. Если этот аргумент не используется, автоматически подставляется ключевое слово Is. Необязательный. Одна или более инструкций, выполняемых, если выражение совпадает с любым значением из Список_выражений-n. Необязательный. Одна или более инструкций, выполняемых, если Выражение не совпадает ни с каким Case-предложением список_выражений-n Описание элемента
Пример инструкции Select…Case Приведённая процедура Case. Select позволяет решить ту же задачу, которую решает процедура If. Then. Else 4. Sub Case. Select() Select Case Range ("A 6") Case Is >= 0. 84 Msg. Box "Ваша оценка """ & "Отлично" & """" Case 0. 68 To 0. 83 Msg. Box " Ваша оценка """ & "Хорошо" & """" Case Is > 0. 5 Msg. Box " Ваша оценка """ & "Удовлетворительно" & """" Case Else Msg. Box " Ваша оценка """ & "Неудовлетворительно" & """" End Select End Sub 130
Инструкция безусловного перехода Go. To Инструкция Go. To изменяет ход выполнения программы без проверки каких либо условий, передавая управление на метку в коде. Формат : Go. To метка Обязательный аргумент метка может быть текстовым или числовым. Метка заканчивается символом двоеточие(: ). В процедуре Без. Усл. Переход на экран выводится число 10, если значение r = 1 и строка m 20, в противном случае. Sub Без. Усл. Переход() Dim r r = Input. Box("Иллюстрация инструкции безусловного перехода") If r = 1 Then Go. To 10 Else Go. To m 20 10: Msg. Box 10 Exit Sub m 20: Msg. Box "m 20" End Sub 131
Инструкции перехода к обработчику ошибок On Error Инструкция On Error делает доступным обработчик ошибок и определяет его положение внутри процедуры и используется также для запрета обработки ошибок. Формат: On Error Go. To строка On Error Resume Next On Error Go. To 0 On Error Go. To строка On Error Resume Next On Error Goto 0 Делает доступным обработчик ошибок, который начинается со строки, определённой аргументом строка. Этот аргумент может быть числом или буквенно-числовым. При возникновении ошибки управление выполнением программы передаётся на строку кода с меткой строка. Таким образом происходит активизация обработчика ошибок. Метка строка должна находиться в той же процедуре, что и инструкция On Error. Указывает на то, что при возникновении ошибки управление выполнением программы передаётся на инструкцию, следующую непосредственно за тем, в котором произошла ошибка. Эта инструкция позволяет продолжить выполнение программы, несмотря на возникновение ошибки времени выполнения (run-time). Отключает пользовательский обработчик ошибок в данной процедуре. Эта инструкция не указывает метку 0 в качестве начала обработчика ошибки, даже если в процедуре действительно имеется такая метка. 132
Пример On Error В процедуре Пример. On. Error. Goto_0 инструкция On Error Go. To 0 отключает пользовательский обработчик ошибок в данной процедуре и может быть использована для восстановления нормальной обработки ошибок перед выходом из процедуры. Sub Пример. On. Error. Goto_0() Dim Num As Single On Error Go. To 0 Num = Input. Box("Введите число") Msg. Box "Введено число " & Num Resume End Sub При возникновении ошибки ввода выводится следующее диалоговое окно, сообщающее о несоответствии типа данного введённому значению (“Пусто” или “Не число”). В процедуре Пример. On. Error. Goto возникает ошибка ввода до тех пор, пока не будет введено численное значение переменной Num; управление передаётся на метку Ошибка, и инструкция Resume возвращает управление инструкции Num = Input. Box("Введите число"). Sub Пример. On. Error. Goto() Dim Num As Single On Error Go. To Ошибка Num = Input. Box("Введите число") Msg. Box "Введено число " & Num Exit Sub Ошибка: Msg. Box "Число не введено " Resume End Sub 133
Инструкция прерывания выполнения блока Exit Имеются следующие варианты инструкции Exit: • Инструкция Exit Do позволяет выйти из цикла Do…Loop. • Инструкция Exit For позволяет выйти из цикла For…Next или For Each…Next. • Инструкция Exit Function позволяет выйти из функции, в которой имеется данная инструкция. • Инструкция Exit Sub позволяет выйти из процедуры Sub, в которой имеется данная инструкция. 134
Инструкция передачи управления выполнением процедуры подпрограмме внутри процедуры Go. Sub… Return Инструкция имеет следующий формат: Go. Sub метка [инструкции или процедура] метка [инструкции подпрограммы] Return Инструкции Go. Sub и Return можно использовать в любом месте процедуры, но Go. Sub и соответствующая ему инструкция Return должны быть в одной и той же инструкции. Подпрограмма может иметь более одной инструкции Return. 135
Инструкция передачи управления выполнением процедуры на одну из нескольких строк кода On…Go. Sub и On…Go. To Инструкции On…Go. Sub и On…Go. To предназначены для передачи управления выполнением программы на одну из нескольких определённых строк программы в зависимости от значения некоторого параметра. Формат: On выражение Go. Sub список_назначений On выражение Go. To список _назначений Элемент инструкции Выражение Список_назначений Описание элемента Обязательный. Любое числовое выражение, которое имеет целое значение от 0 до 255 включительно. Если выражение является нецелым числовым выражением, оно округляется до его оценки Обязательный. Список номеров строк или меток строк, разделяемых запятыми Замечания Значение элемента выражение определяет, к какой строке из элемента список_назначений выполняется переход. Если значение выражения меньше 1 или превышает число элементов списка, происходит одно из следующих событий: Если выражение Равняется 0 то Управление передается инструкции, следующей за On. . . Go. Sub или On. . . Go. To Превышает число элементов списка Управление передается инструкции, следующей за On. . . Go. Sub или On. . . Go. To Отрицательное Возникает ошибка Больше 255 Возникает ошибка 136
ПРОГРАММИРОВАНИЕ НА ЯЗЫКЕ VBA (2).pptx