ВУЗ: Не указан
Категория: Не указан
Дисциплина: Не указана
Добавлен: 23.03.2025
Просмотров: 1037
Скачиваний: 2
Символ, который присваивает значение именованному аргументу «:=», не является в точности тем же обычным оператором присваивания «=». Если опустить двоеточие «:» во время присваивания значения именованному аргументу, VBA не обязательно обнаружит ошибку синтаксиса, но не может интерпретировать этот оператор правильно. Когда VBA выполняет этот оператор, он отображает одну из нескольких возможных ошибок во время исполнения, наиболее часто – ошибку несовпадения типов.
Нельзя смешивать именованные аргументы с обычным списком аргументов в одном и том же вызове функции. Необходимо использовать либо именованные аргументы, либо список обычных аргументов для каждого отдельного вызова функции.
Пример 4. Процедура, вычисляющая площадь круга.
Код процедуры Prog4 (ввод исходных данных при помощи функции InputBox отображается в диалоговом окне (Рис.1.2))
Const Pi As Single =3.14 ' число π |
'1 |
Dim CircleArea As Single ' площадь круга |
'2 |
Sub Prog4 () |
'3 |
Const BoxTitle = "Площадь круга" |
'4 |
Dim Radius As Single, Temp As String |
'5 |
Temp = InputBox("Введите радиус " & Chr(13) & "круга", _ |
'6 |
BoxTitle) |
'7 |
Radius = CSng(Temp) |
‘8 |
CircleArea = Pi * Radius * Radius |
'9 |
MsgBox "Результат " & CircleArea, vbInformation + _ |
'10 |
vbOKCancel, BoxTitle |
'11 |
End Sub |
'12 |
27 |
Строки 1 и 2 программы 4 объявляют константу Pi и переменную CircleArea модульного уровня (после знака апостроф расположены пояснения – комментарии). Строка 3 содержит объявление процедуры. Строка 4 объявляет константу процедурного уровня BoxTitle; эта константа имеет только локальный доступ в процедуре. В строках 6, 7 оператор вызывает функцию InputBox. Она отображает свой первый аргумент как текст в диалоговом окне (Рис.1.2), запрашивая у пользователя ввести значения какого-либо типа. В этом операторе InputBox отображает текст "Введите радиус круга" (функция Chr(13) – символ перехода на новую строку), чтобы сообщить пользователям процедуры, какое значение они должны ввести. InputBox использует второй аргумент, представленный константой BoxTitle, в качестве заголовка диалогового окна.
Рис. 1.2 |
Рис. 1.3 |
При выполнении оператора InputBox пользователь вводит число в текстовое окно и выбирает командную кнопку ОК или Cancel, чтобы закрыть диалоговое окно, как и любое другое окно Windows. Всякий раз, когда вы вызываете какую-либо функцию, необходимо как-то использовать значение, возвращаемое функциией. Значение, возвращаемое функцией, называется результатом функции (function result). Как показано в строках 6, 7 (строка 7 продолжение строки 6,
28
в конце строки 6 на это указывает пробел с подчеркиванием) функция InputBox вводит значение, которое присваивается переменной Temp. Результат функции InputBox всегда является строкой (вот почему переменная Temp была объявлена как String). Поскольку переменная Temp была объявлена явно как String, значение строки должно быть преобразовано в численное значение перед тем, как можно будет его использовать в математических вычислениях. Строка 8 программы 4 выполняет именно это, используя, встроенную функцию CSng для преобразования пользовательских данных ввода в число с типом Single. В строках 10,11 используя функцию MsgBox, в диалоговое окно (Рис.1.2) выводится площадь круга, переменная CircleArea, вычисленная операторе 9.
Выражения в VBA
Выражение (expression) – это комбинация знаков операций и операндов. Каждое выражение вычисляется до конкретного значения. Выражения могут состоять из операндов: констант (литеральных или именованных), переменных (любого типа), массивов, элементов массива, функций, знаков операций, а также скобок.
Результат вычисления выражения имеют результатом одно значение конкретного типа данных. Выражения могут также иметь результатом одно из специальных значений Empty (неинициализированную переменную типа Variant или результат выражения, содержащий неинициализированную переменную типа Variant) или Null (Null представляет выражение, содержащее неверные данные). Когда используется какой-либо знак в выражении, элементы данных (переменные или константы), над которыми производится действие, называются операндами (operands); большинству операций требуется два операнда.
29
Совместимость типов данных. Автоматическое преобразование данных
Не все типы данных совместимы друг с другом, и нельзя использовать несовместимые типы данных в одном и том же выражении. Например, не имеет смысла арифметическое сложение строки с числом, так как такое выражение не является значащим и VBA не может его оценить.
Многие типы данных совместимы друг с другом. Например, вы можете объединять различные численные типы данных в одном и том же выражении; VBA автоматически выполняет необходимые преобразования типа различных численных типов. Очень важно контролировать и знать тип выражения, потому что если выражения содержат несовместимые типы, VBA выдает ошибку времени исполнения – ошибку несовпадения типов (type-mismatch). При обработке выражения, содержащего различные типы данных VBA сначала «пытается» устранить любое различие типов, преобразуя значения в выражении в совместимые типы данных. Если устранить какие-либо различия преобразованием типов не удается, отображается ошибка времени исполнения и процедура прекращает выполняться. Например, в выражении 25 & "Информатика" VBA всегда выполняет строковую конкатенацию (соединяет две строки), независимо от типов переменных; результатом является тип String; это выражение никогда не вызывает ошибки несовпадения типов.
VBA обычно преобразует все численные типы данных в выражении в тип наибольшей точности, а затем дает этот тип результату выражения. Например, если выражение содержит численные значения с типами Integer и Single, результат выражения является типом Single – тип наибольшей точности в этом выражении. Если вы присваиваете результат численного выражения переменной с наи-
30
меньшей точностью, чем фактический тип результата выражения, VBA округляет результат выражения до тех пор, пока его точность не совпадет с ожидаемым типом. Например, если вы присваиваете численное выражение, имеющее результатом число типа Double, переменной типа Integer, VBA округляет число двойной точности до типа Integer.
При преобразовании числа в строку VBA создает строку, содержащую все цифры этого числа и десятичный знак (если число имеет его). Число 3413.72 (точка используется для записи числа в коде), например, преобразуется в строку "3413,72". Если число очень большое или очень маленькое, VBA может создать строковое представление числа в экспоненциальной записи; например, число
0.0000000004927 преобразуется в строку "4,927Е–11".
VBA может преобразовывать строку в число, если только эта строка содержит символьное представление числа в десятичном формате или экспоненциальном. Строки "988,6", "812", "-186,7", "1,ЗЕ10" представляют числа, и VBA может преобразовать их в числа. Строки "1.045", "$74.550" и "С добрым утром!" не могут быть преобразованы в числа.
Когда VBA преобразует значения типа Boolean в числа, значение True преобразуется в 1, а значение False – в 0. Когда VBA преобразует число в тип Boolean, нуль преобразуется в False, а любое другое значение преобразуется в True. Когда VBA преобразует значения типа Boolean в строки, VBA использует строку "True" для
True и "False" – для False.
Оператор присваивания ( = )
Этот оператор используется для присваивания результата выражения переменной. Синтаксис оператора присваивания следующий:
31
varname = expression
переменная varname - любая переменная, a expression - любое выражение.
При выполнении оператора присваивания VBA сначала вычисляет выражение справа от оператора присваивания « = », а затем сохраняет результат выражения в переменной, имя которой находится слева от оператора присваивания.
Когда присваивается результат выражения переменной с определенным типом данных, этот результат может иметь тип данных, совместимый с типом переменной, получающей новое значение. Во многих случаях, VBA может преобразовывать тип данных результата выражения в тип, совместимый с типом переменной, принимающей новое значение, если результат выражения и переменная еще не имеют совместимых типов. Переменным типа Variant может быть присвоен любой тип данных.
Арифметические операции
VBA может выполнять все обычные арифметические операции (реализуемые посредством арифметических выражений): сложение, вычитание, умножение и деление, а также возведение чисел в указанную степень и предоставляет дополнительные особые математические операции для целочисленного деления и деления по модулю (табл. 1.3).
32
Таблица 1.3. - Обозначения, используемые в арифметических выражениях (Ni - это допустимое численное выражение VBA)
Знак |
Синтаксис |
Имя/Описание |
|
+ |
N1 |
+ N2 |
Сложение. Прибавляет N1 к N2 |
– |
N1 |
– N2 |
Вычитание. Вычитает N2 из N1 |
* |
N1 |
* N2 |
Умножение. Умножает N1 на N2 |
/ |
N1 |
/ N2 |
Деление. Делит N1 на N2. |
\ |
Nl \ N2 |
Целочисленное деление. Делит N1 на N2, отбра- |
|
сывая любую дробную часть так, чтобы резуль- |
|||
N1 Mod N2 |
Деление по модулю. Делит N1 на N2, возвращая |
||
только остаток операции деления. |
|||
^ |
N1 |
^ N2 |
Возведение в степень. Возводит N1 в степень N2. |
Оба операнда должны быть численными выражениями или строками, которые VBA может преобразовать в число.
Операции сравнения
Операции сравнения также называют операциями отношения
(relational operators). Результатом любой операции сравнения яв-
ляется значение типа Boolean. Операции сравнения используются для сравнения значений любого сходного типа (табл. 1.4).
Таблица 1.4 –операции сравнения (Е в этой таблице - любое действительное выражение VBA)
Операция |
Синтаксис |
Наименование/описание |
(Оператор) |
||
= |
El = Е2 |
Равенство. True, если El равно Е2, |
иначе – False |
||
< |
El < Е2 |
Меньше, чем. True, если El меньше, |
чем Е2, иначе – False |
||
<= |
El < Е2 |
Меньше, чем или равно. True, если Е1 |
меньше или равно Е2, иначе – False |
||
<> |
<> |
Не равно. True, если Е1 не равно Е2, |
иначе – False |
||
> |
> |
Больше, чем. True, если Е1 больше, чем |
Е2, иначе – False |
||
>= |
>= |
Больше, чем или равно. True, если Е1 |
больше или равно Е2, иначе – False |
||
33 |