3.VBA конструкция языка.ppt
- Количество слайдов: 26
Типы данных и переменные Byte (байт) - от 0 до 255 Integer (целое) - от – 32768 до 32767 String строка (длина строки) Long (длинное целое) - от – 2 147 483 648 до 2 147 483 647 Single (с плавающей точкой)- от – 3, 402823 Е 38 до – 1, 401298 Е-45 (для отриц. знач. ); от 1, 401298 Е-45 до 3, 402823 Е 38 (для полож. знач. ) Способы объявления явных переменных Dim Имя. Переменной 1 [As Тип 1] [, Имя. Переменной 2 [As Тип 2]] Private Имя. Переменной 1 [As Тип 1] [, Имя. Переменной 2 [As Тип 2]] Static Имя. Переменной 1 [As Тип 1] [, Имя. Переменной 2 [As Тип 2]] Public Имя. Переменной 1 [As Тип 1] [, Имя. Переменной 2 [As Тип 2]] Неявное объявление переменных - включение в конец ее имени специального символа, устанавливающего тип переменной. % & ! $ - integer long single string
Типы области видимости переменной • переменные уровня процедуры распознаются только в процедуре, в которой они описаны при помощи инструкций Dim или Static. Такие переменные называются локальными. • переменные уровня модуля используются только в модуле, в котором они описаны перед описанием процедур при помощи инструкций Dim или Private, но не в других модулях данного проекта. • переменные уровня модуля, описанные при помощи инструкции Public, являются доступными для всех процедур проекта. Такие переменные называются открытыми. ОБЪЯВЛЕНИЕ МАССИВОВ Dim Имя. Переменной [Индексы] [As Тип] Индексы – размерности массива (допускается до 60 размерностей). Синтаксис: [Нижний To] Верхний [, [Нижний To] Верхний]. Если нижний индекс не задан явно, нижняя граница массива определяется инструкцией Option Base. Если эта инструкция отсутствует, нижняя граница массива равна нулю.
Операции VBA Математические [Операнд 1] + [Операнд 2] - Сложение [Операнд 1] - [Операнд 2] - Вычитание - [Операнд 1] - Перемена знака [Операнд 1] * [Операнд 2] - Умножение [Операнд 1] / [Операнд 2] - Деление [Операнд 1] [Операнд 2] - Целочисленное деление [Операнд 1] mod [Операнд 2] - Остаток от деления по модулю [Операнд 1] ^ [Операнд 2] - Возведение в степень Операции отношения [Операнд 1] < [Операнд 2] - Меньше [Операнд 1] > [Операнд 2] - Больше [Операнд 1] <= [Операнд 2] - Меньше или равно [Операнд 1] >= [Операнд 2] - Больше или равно [Операнд 1] <> [Операнд 2] - Не равно [Операнд 1] = [Операнд 2] - Равно [Операнд 1] Is [Операнд 2] - Сравнение операндов, содержащих ссылки на объекты [Операнд 1] Like [Операнд 2] - Сравнение строковых выражений Логические операции [Операнд 1] And [Операнд 2] - Логическое умножение [Операнд 1] Or [Операнд 2] - Логическое сложение [Операнд 1] Xor [Операнд 2] - Исключающее Or (возвращает True только тогда, когда только один операнд возвращает True) [Операнд 1] Not [Операнд 2] Логическое отрицание
Приоритеты операций ОПЕРАТОРЫ VBA 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 1. Оператор присваивания Синтаксис: Вызов функции и скобки ^ - возведение в степень – (смена знака) * или / - деление на целое Mod (остаток от деления на целое) + или – >, <, >=, <>, = Not And Or Xor Присваивает значение выражения переменной, константе или свойству объекта. Переменная (или Константа или Свойство. Объекта) = Выражение. <Пробел>+<Знак подчеркивания> в конце строки обеспечивает то, что последующая строка является продолжением предыдущей. • Нельзя разбивать переносом строковые константы; • Допустимо не более семи продолжений одной и той же строки; • Сама строка не может состоять более чем из 1024 символов. Пример: Корректный перенос Строка = “Visual Basic ” _ & “for Applications
Позволяет избежать повторений имени одного и 2. Оператор With того же объекта при работе с его свойствами и методами. Структурирует код. Допустимо также использование вложенных операторов With. Пример: With Range (“A 1”) . Value = 3 . Font. Italic = True End With Range (“A 1”) . Value = 3 With. Font . Italic = True . Size = 12 End With 3. Операторы управления Функционально делятся на две группы: * Перехода и выбора * Повторения (циклы)
3. 1. Операторы перехода Оператор условного перехода Задает выполнение определенных групп инструкций в зависимости от значения выражения. Синтаксис: If Условие Then [Инструкция] [Else Инструкция _else] Допускается также использование блочной формы синтаксиса, которая часто упрощает восприятие оператора условного перехода. If Условие Then [Инструкции] [Else [Инструкции _else] End if] Пример: Если скидка 5 % применяется только к суммам больше 1000, то в VBA это запишется следующим образом: If Сумма > 1000 Then Скидка = 0. 05 При блочной структуре: If Сумма > 1000 Then Скидка = 0. 05 Else Скидка = 0. 05 End If
Если дерево условий более сложное, используется оператор If – Then – Else. If, позволяющий проверять множественные условия. Синтаксис: If Условие 1 Then [Инструкции 1] Else. If Условие 2 Then [Инструкции 2] [Else [Инструкции _else] End if] Пример. В зависимости от вводимого числа выдается сообщение о принадлежности числа: • Либо интервалу [0, 1] • Либо интервалу (1, 2] • Либо о не принадлежности числа этим двум интервалам X = Input. Box(“Введите число”) If (0<=x) and (x<=1) then Msg. Box “Число из интервала [0, 1]” Else. If (1<x) And (x<=2) Then Msg. Box “Число из интервала (1, 2]” Else Msg. Box “Число либо отрицательное, либо больше 2]” End If
3. 2. Оператор выбора Выполняет одну из нескольких групп инструкций, в зависимости от значения выражения. Синтаксис: Select Case Выражение [Case Список. Выражений-1 [Инструкции-1]] … [Case [Инструкции-n]] [Case Else [Инструкции_Else]] End Select Список. Выражений – это список с разделителями, состоящий из одной или нескольких форм следующего вида: Выражение, Выражение To Выражение, Is Оператор. Сравнения Выражение, где Выражение – любое числовое или строковое выражение. Ключевое слово To задает диапазон значений. При его использовании перед ним должно находиться меньшее значение. Ключевое слово Is с оператором сравнения задает диапазон значений. Если ключевое слово не указано, оно вставляется по умолчанию.
Инструкции – это одна или несколько инструкций, выполняемых в том случае, если выражение совпадает с любым компонентом списка от Список. Выражений-1 до Список. Выражений-n Инструкции_Else – одна или нескольких инструкций, выполняемых в том случае, если выражение не совпадает ни с одним из предложений Case. Пример. Число = Input. Box(“Введите целое число”); Select Case Число Case 1 Msg. Box “Число равно 1” Case 2, 3 Msg. Box “Число равно 2 или 3” Case 4 To 6 Msg. Box “Число от 4 до 6” Case Is >= 7 Msg. Box “Число не менее 7” End Select;
4. Операторы повторения (цикла) 4. 1. Оператор For - Next Повторяет выполнение группы инструкций указанное число раз. Синтаксис: For Счетчик = Начало To Конец [Step Шаг] [Инструкции] [Exit For] [Инструкции] Next [Счетчик] Счетчик изменяется от Начала до Конца с указанным шагом. Если Шаг не указан, он полагается равным 1. Альтернативный способ выхода из цикла предоставляет инструкция Exit For.
Пример. Суммирование элементов выделенного диапазона. With Selection n =. Rows. Count m =. Columns. Count End With S = 0 For i = 1 To n For j = 1 To m S = S + Selection. Cells(i, j). Value Next j Next i With Selection. End(xl. Down) . Offset(1, 0). Value = “Сумма” . Offset(1, 1). Value = S End With В ячейку под первым столбцом выделенного диапазона выводится надпись «Сумма» , а найденное значение выводится в соседнюю с ней справа ячейку.
4. 2. Оператор For Each Повторяет выполнение группы инструкций для каждого элемента массива или семейства. Синтаксис: For Each Элемент In Группа [Инструкции] [Exit For] [Инструкции] Next [Элемент] Примеры. 1. Суммирование элементов выделенного диапазона. S = 0 For Each c In Selection. Cells S = S + c. Value Next c Msg. Box s
2. Из рабочей книги удаляется рабочий лист Тест, если такой лист в ней есть. For Each Лист In Worksheets If Лист. Name = “Тест” Then Лист. Delete End If Next Лист 3. Ячейки диапазона А 1: С 4 с положительными значениями окрашиваются в синий цвет, а с неположительным – в красный. For Each Ячейка In Range(“A 1: C 4”). Cells With Ячейка If. Value <= 0 Then . Interior. Color. Index = 3 Else . Interior. Color. Index = 5 End If End With Next Ячейка
4. 3. Оператор While – Wend Выполняет последовательность инструкций, пока заданное условие имеет значение True. Синтаксис: While Условие [Инструкции] Wend Пример. Из последовательности случайных чисел выделяется значение 7. Lottery. Entry = 0 While Lottery. Entry <> 7 Lottery. Entry = Int(10*Rnd()) Beep Wend Msg. Box “Ваш номер равен ” & Lottery. Entry
4. 4. Оператор Do – Loop Выполняет последовательность инструкций, пока заданное условие имеет значение True (случай While) или пока оно не примет значение True (случай Until). Синтаксис: Do [{While | Until} Условие] [Инструкции] [Exit Do] [Инструкции] Loop [{While | Until} Условие] В любом месте управляющей структуры Do - Loop может быть размещено любое число инструкций Exit Do, обеспечивающих альтернативные возможности выхода из цикла Do - Loop
Примеры. 1. Из последовательности случайных чисел выделяется значение 7 (различные варианты использования цикла Do – Loop). Lottery. Entry = 0 Do Until Lottery. Entry = 7 Lottery. Entry = Int(10*Rnd()) Beep Loop Msg. Box “Ваш номер равен ” & Lottery. Entry = 0 Do Lottery. Entry = Int(10*Rnd()) Beep Loop Until Lottery. Entry = 7 Msg. Box “Ваш номер равен ” & Lottery. Entry = 0 Do While Lottery. Entry <> 7 Lottery. Entry = Int(10*Rnd()) Beep Loop Msg. Box “Ваш номер равен ” & Lottery. Entry
Lottery. Entry = 0 Do Lottery. Entry = Int(10*Rnd()) Beep Loop While Lottery. Entry <> 7 Msg. Box “Ваш номер равен ” & Lottery. Entry 2. Суммирование вводимых чисел Завершение – ввод любого строкового выражения (пример альтернативного выхода из цикла). S = 0 Do X = Input. Box(“Введите число”) If Not Is. Numeric (X) Then Exit Do S = S + X Loop
4. 5. Оператор перехода Go. To Задает переход на указанную строку внутри процедуры. Обязательный параметр Строка может быть любой меткой строки или ее номером. Синтаксис: Go. To Строка Для использования этого оператора какой-то строке нужно присвоить метку. Она должна начинаться с буквы и заканчиваться двоеточием. Пример. Игроку даны десять попыток броска игральной кости. В случае, если при какой-то из этих попыток выпадает шесть очков, игрок выигрывает и игра заканчивается. Randomize For I = 1 to 10 Очки = Int(6 * Rnd()) + 1 If Очки = 6 Then Go. To Сообщение Next I Go. To Конец Сообщение: Msg. Box “Выиграли при броске ” & CStr(I) Конец: End Sub В данном примере использование цикла Do – Loop существенно может упростить код.
ПРОЦЕДУРА Процедура является самостоятельной частью кода, которая может иметь параметры, изменять их значения и выполнять последовательность инструкций. Синтаксис процедуры Sub: [Private | Public] [Static] Sub Имя [(Список. Параметров)] [Инструкции] [Exit Sub] [Инструкции] End Sub Инструкция Exit Sub приводит к немедленному выходу из процедуры. Синтаксис Списка. Параметров: [Optional] [By. Val | By. Ref] [Param. Array] Имя. Переменной [()] [As Тип] [= По. Умолчанию]
ФУНКЦИЯ Синтаксис процедуры Function: [Private | Public] [Static] Function Имя [(Список. Параметров)] [As Тип] [Инструкции] [Имя = Выражение] [Exit Function] [Инструкции] [Имя = Выражение] End Sub Синтаксис процедуры Function содержит те же элементы, что и процедура Sub. Инструкция Exit Function приводит к немедленному выходу из процедуры Function. Это также самостоятельная процедура, которая может получать значения параметров, выполнять последовательность инструкций и изменять значения параметров. Но процедура Function может применяться в правой части выражения, как и любая другая встроенная функция. Она вызывается в выражении по своему имени, за которым следует список параметров (в скобках). Для возврата значения из функции следует присвоить значение имени функции. Любое число таких инструкций присваивания может находиться в любом месте процедуры.
Пример организации модуля ‘ Опция VBA Option Base 1 ‘ Постоянные уровня модуля Const Pi = 3, 14159265358979 ‘ Переменные уровня модуля Dim Out(2) As Double ‘ Function Длина. Окружности(Радиус) Длина. Окружности = 2* Pi * Радиус End Function ‘ Function Площадь. Круга(Радиус) Площадь. Круга = Pi * Радиус^2 End Function ‘ Sub Результат(Радиус) Out(1) = Длина. Окружности(Радиус) Out(2) = Площадь. Круга(Радиус) End Sub ‘ Sub Вывод() Результат 1 Msg. Box Cstr(Out(1)) & vb. Cr & CStr(Out(2)) End Sub
Вызов процедуры Sub из другой процедуры можно произвести следующими способами: 1. Имя. Процедуры Список. Фактических. Параметров – список параметров, передаваемых процедуре. Он должен соответствовать по количеству и типу списку параметров заданных при определении процедуры. Если требуется использовать несколько процедур с одинаковыми названиями, при их вызове нужно указывать имя модуля, в котором они расположены. Имя. Модуля. Имя. Процедуры Список. Фактических. Параметров 2. Call Имя. Процедуры (Список. Фактических. Параметров) Используя имена параметров, VBA позволяет вводить фактические параметры в любом порядке и опускать необязательные (Optional). При этом после имени параметра ставятся двоеточие и знак равенства, после которого помещается значение параметра (фактический параметр). Примеры основных способов передачи параметров для процедуры Результат 1 Результат Радиус: =1 R = 1 Результат R Call Результат(1)
Передача параметров по ссылке и значению При вызове процедуры в нее передаются некоторые параметры. Внутри процедуры им могут быть присвоены какието значения, сохраняющиеся после выхода из процедуры. Таким образом, по умолчанию при передаче переменных в качестве параметров в процедуру передаются физические адреса переменных. Поэтому внутри нее может быть модифицировано их содержание. Для явного указания передачи параметров по ссылке в процедуру используется ключевое слово By. Ref. Другой способ передачи – передача по значению, задается ключевым словом By. Val. При этом в процедуру попадает не сама переменная, а ее значение.
Пример. Sub Пример(By. Val a, b, By. Ref c) ‘а передается по значению ‘ по умолчанию b передается по ссылке ‘ c передается по ссылке a = a + 1 b = b + 1 c = c + a End Sub ‘ Sub Проверка() a = 1: b = 10: c = 100 Пример a, b, c Msg. Box a ‘ Отобразится 1 Msg. Box b ‘ Отобразится 11 Msg. Box c ‘ Отобразится 102 End Sub
3.VBA конструкция языка.ppt