КАТЕГОРИИ: Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748) |
Оператор присваивания
Оператор присваивания выглядит, как привычный знак «=». Синтаксис: Имя_переменной = Выражение Имя_переменной– это обозначение, которое программист дает участку памяти для хранения в нем данных определенного типа. Переменной можно дать практически любое имя, но рекомендуется делать его описательным, близким по смыслу к содержанию. Значение переменной в процессе работы программы может изменяться. Образование имен переменных должно подчиняться правилам: - Имя переменной начинается с буквы. - За буквой следует любая комбинация букв, цифр, и символов подчеркивания. - Имя переменной не должно содержать точек, пробелов, знаков арифметических операций. - Имя не может превышать 255 символов в длину. - Имя не может совпадать ни с одним ключевым словом VBA, именем другой переменной в данной процедуре или именем процедуры. Выражение – любое допустимое в VBA выражение – совокупность переменных, констант, функций, объединенных знаками арифметических и логических операций. При выполнении оператора присваивания сначала вычисляется значение выражения, стоящего справаот оператора, а потом полученное значение присваивается переменной, указанной слева от оператора. При записи выражения могут использоваться следующие группы операций: 1. Арифметические операции. Для арифметических операций приняты обозначения: + сложение; – вычитание; * умножение; / деление; ^ возведение в степень; \ целочисленное деление (отбрасывает дробную часть); Mod деление по модулю. N1 Mod N2 делит N1 на N2, возвращая остаток от деления. 2. Операции сравнения. Операции сравнения иногда называют операторы отношения. Их применяют для формирования условия выполнения некоторой последовательности операций. Результат выполнения оператора сравнения принимает только два значения: True (истина) и False (ложь). Принятые обозначения: = равно; <> не равно; < меньше; > больше; <= меньше или равно; >= больше или равно. 3. Конкатенация строк. Основной знак для операции слияния (конкатенация) текстовых строк – амперсанд &. 4. Логические операции. Логические операции используются при формировании условий для записи логических выражений. AND – логическое «И». Результат принимает значения «истина», если истинны оба операнда. OR – логическое «ИЛИ». Результат принимает значение «истина», если хотя бы один из операндов имеет значение «истина». NOT – отрицание. Значение операнда меняется на противоположное. Операции имеют определенный приоритет (старшинство) выполнения (таблица 2).
Таблица 2 Приоритеты операций
Приоритеты перечислены в порядке убывания (чем больше номер, тем меньше приоритет операции). Для изменения естественного порядка выполнения операций используются круглые скобки. Например: Disct=(S - P)/(dt)^2 Сначала вычисляется разность S - Р, затем переменная dt возводится в степень 2, после этого вычисляется частное от деления; результат присваивается переменной Disct.
2. Условные операторы. Существует несколько вариантов записи оператора If. Синтаксис 1 (If…Then): If Логич_выражение Then Оператор Вычисляется значение логического выражения, если оно принимает значение «истина», то выполняется Оператор. В противном случае сразу выполняется инструкция в следующей строке. Синтаксис 2 (If…Then…Else): If Логич_выражение Then Операторы_1 Else Операторы_2 End If Вычисляется значение логического выражения, если оно принимает значение «истина», то выполняется группа Операторы_1. В противном случае выполняется группа Операторы_2. Указанные группы операторов могут содержать внутри себя другие операторы If. Для последовательной проверки нескольких условий удобно использовать инструкцию If…ElseIf. Синтаксис 3: If Логич_выражение_1 Then Операторы_1 ElseIf Логич_выражение_2 Then Операторы_2 ………. Else Операторы End If Если первое логическое выражение истинно, то выполняется соответствующая ему группа операторов после Then, иначе проверяется второе логическое выражение и, если оно истинно, выполняется соответствующая ему группа операторов и.т.д. Если ни одно из логических выражений не примет значение «истина», то выполняется группа операторов после Else.
3. Оператор Select Case. Для выбора из большого количества возможных действий можно использовать инструкцию Select Case. Простейший вариант записи инструкции: Select Case Выражение Case Значение_выражения_1 Операторы_1 Case Значение_выражения_2 Операторы_2 ………………………………. Case Else Операторы_Else End Select Вычисляется значение выражения, в частности, выражение может быть просто именем переменной. Затем выполняется группа операторов, соответствующая полученному значению. Если значение выражения отличается от указанных в Case, то выполняется группа операторов, соответствующая Case Else. Всегда выполняется только один из разделов Case. Возможны более сложные варианты записи Case, когда вместо одного значения переменной указывается список значений, диапазон значений, операции сравнения (например, Case Is >100).
4. Циклические операторы. Одним из недостатков записанных макросов является их неспособность повторять операции, если вы не повторили их вручную при записи макроса. Программные структуры, дающие возможность повторения одной или нескольких инструкций, называются циклами. Некоторые циклические структуры созданы так, что они повторяются заданное количество раз. Другие позволяют организовать повторение до тех пор, пока выполняется некоторое условие. Операторы, записанные между инструкциями начала и конца цикла, называются телом цикла. Тело цикла может содержать любые операторы, в том числе и операторы цикла. Такие циклы называются вложенными.
Цикл For…Next. Данный цикл следует использовать, если требуется организовать повторение операций заданное число раз. For переменная_цикла = нач_значение To конечн_значение [Step шаг] Операторы Next переменная_цикла Переменная_цикла – любая числовая переменная (чаще всего переменная, принимающая целочисленные значения). Step – шаг изменения значения переменной цикла. Может принимать положительные и отрицательные значения, по умолчанию имеет значение, равное единице, и может не указываться. При выполнении цикла переменной цикла присваивается начальное значение. Затем выполняются все операторы тела цикла. Далее значение переменной цикла изменяется на величину шага и полученное значение сравнивается с конечным значением переменной. Если конечное значение не достигнуто, то вновь выполняются все инструкции тела цикла. Когда значение переменной цикла превысит конечное значение, то управление передается инструкции, следующей за ключевым словом Next. Пример: Вычисление суммы чисел по принципу накопления суммы в некоторой переменной. Рассмотрим фрагмент кода процедуры: ‘ Обозначим через S вычисляемое значение суммы ‘ Начальное значение суммы S = 0 For I=1 ТО 150 S = S+I Next I В данном примере вычисляется сумма чисел от 1 до 150 и результат вычисления сохраняется в переменной S. Вычисление происходит следующим образом: первоначально значение суммы равно нулю. Затем начинает работать цикл. Переменная цикла принимает значение 1 и оно добавляется к старому значению суммы, а результат записывается снова в переменную S (строка 4). Далее переменная цикла принимает следующее значение, равное двум, и операция повторяется, т.е. сумма как бы «накапливается» в переменной S. Данный пример очень легко изменить для вычисления суммы четных (или нечетных) чисел. Для этого необходимо заголовок цикла переписать в виде: For I = 2 To 150 Step 2 для суммирования четных чисел; или For I = 1 To 150 Step 2 для суммирования нечетных чисел.
Цикл с проверкой условия. Циклической структурой, позволяющей реализовать проверку перед началом выполнения тела цикла, является оператор Do While. Do While логическое_выражение Операторы Loop Логическое_выражение – это допустимое логическое выражение, которое задает условие, при котором будет выполняться тело цикла. Данный цикл работает, пока значение выражения истинно. Когда логическое выражение примет значение False, управление передается оператору, следующему за ключевым словом Loop, т.е. цикл завершается. В качестве логического выражения можно использовать логическую переменную, принимающую значения True или False. Оператор Do While позволяет создавать циклы, повторяющиеся заранее неизвестное число раз. Принудительное завершение циклов. Существует много причин, по которым может потребоваться немедленное завершение работы цикла. Например, пользователь отказался от ввода данных, решение найдено и нет смысла в продолжении вычислений. Для немедленного завершения цикла For…Next используется инструкция Exit For. Для немедленного завершения цикла Do используется инструкция Exit Do. Описание типа переменных При написании программ на VBA не обязательно объявлять типы используемых переменных до их первого использования. Когда в программе встречается оператор присваивания, VBA создаст переменную, тип которой совместим с типом выражения. Такой способ создания переменной называется неявным объявлением переменной. Однако, чтобы уменьшить объем занимаемой памяти и избежать ошибок, связанных с преобразованием типа данных или опечаткой в имени переменной, тип переменной лучше объявить до ее использования. Описание типа переменных выполняется с помощью оператора Dim. Общий вид записи: Dim переменная As тип[, переменная As тип, ….] Возможные типы данных приведены в таблице 3.
Таблица 3 Типы данных VBA
Любая переменная, для которой не указан тип данных, становится переменной типа Variant. Такие переменные требуют больше памяти и большинство операций выполняется для них медленнее, чем для других типов. Переменная типа Variant может неправильно обрабатывать дату, полученную с листа Excel, если дата не была отформатирована на листе одним из стандартных форматов даты. Однако, она будет правильно воспринята переменной типа Date. Аналогично, при записи на рабочий лист, дата не будет воспринята правильно из переменной типа Variant. Чтобы запретить неявное описание типа переменных в модуле, необходимо добавить в начало модуля, до первой процедуры модуля, команду Option Explicit. В этом случае при любой попытке использовать переменную, тип которой не указан явно в операторе Dim, будет выдано сообщение об ошибке. Функции MsgBox и Inputbox Для организации взаимодействия с пользователем в VBA служат функции MsgBox и InputBox. Функция MsgBox позволяет вывести на экран окно сообщения с заданной комбинацией кнопок. Общая форма записи: MsgBox сообщение[, кнопки][, заголовок][, HelpFile][, Context] Сообщение – текстовая константа или переменная. Кнопки – комбинация специальных констант VBA, определяющая состав кнопок, отображаемых в окне. Заголовок – текстовая константа или переменная, задающая строку заголовка окна. HelpFile – строковое выражение, содержащее имя файла помощи, созданного компилятором Windows Help File. Context – число, соответствующее тематическому разделу в файле помощи. Аргументы HelpFile и Context указываются только вместе. Единственным обязательным аргументом данной функции является текст сообщения. Например: MsgBox “Данные успешно записаны” Данная инструкция отобразит на экране окно, представленное на рисунке 3.
Рис. 3. Простейшее сообщение
По умолчанию окно содержит кнопку «ОК» и заголовок «Microsoft Excel». Если текст сообщения достаточно длинный, то его можно разместить в разных строках. Для этого в строку сообщения включается специальная константа VBA, означающая создание новой строки – vbNewLine. Например: MsgBox “Данные” & vbNewLine & “успешно” & vbNewLine & “записаны” Данная инструкция отобразит окно, представленное на рисунке 4 (сравните с окном на рисунок 3).
Рис. 4. Перенос текста по строкам
Кроме того, константа vbTab (табуляция) соответствует нажатию клавиши <Tab> на клавиатуре. Этот символ можно включать в строки для выравнивания текста или размещения его по колонкам. Например: Message = "Первая" & vbTab & "строка" & vbTab & "данных" & vbNewLine Message = Message & "Еще" & vbTab & "строка" & vbTab & "данных" MsgBox Message Рис. 5. Использование табуляции
Используя аргументы «кнопки» и «заголовок», можно сформировать более интересные окна сообщений. Рассмотрим возможные значения аргумента «кнопки». Как уже отмечалось, состав кнопок устанавливается специальными константами VBA, описание которых приведено в таблице 4.
Таблица 4 Константы VBA для установления кнопок
Следующая группа констант устанавливает вид пиктограммы, присутствующей в окне сообщения (таблица 5).
Таблица 5 Константы для установления пиктограмм
Если окно сообщения содержит более одной кнопки, то пользователь может указать, какая кнопка должна быть установлена по умолчанию. Тогда при нажатии «Enter» будет выполняться действие, предусмотренное вами для данной кнопки. Соответствующие константы указаны в таблице 6.
Таблица 6 Константы, определяющие положение фокуса в диалоговом окне
Общий вид окна формируется как сумма констант, причем не обязательно должны присутствовать константы каждой группы. Например, на рисунке 6 представлены различные варианты окон сообщений, соответствующие приведенным ниже инструкциям. Sub sample_1() MsgBox "Фильтровать?", vbOKCancel + vbQuestion + vbDefaultButton2, _ "Отбор данных" MsgBox "Отбор данных произведен", vbOKOnly + vbInformation, _ "Отбор данных" MsgBox "Ошибка в данных!", vbOKOnly + vbCritical, "Отбор данных" MsgBox "Ошибка в данных!", vbCritical + vbAbortRetryIgnore, _ "Отбор данных" End Sub
Рис. 6. Примеры окон сообщений
Для того чтобы проверить, какую кнопку выбрал пользователь и выполнить соответствующие действия, необходимо проверить код кнопки, возвращаемый функцией MsgBox. В этом случае обращение к функции должно быть записано в виде: Переменная = MsgBox(сообщение, кнопки, заголовок) Значения, возвращаемые функцией MsgBox, представлены в таблице 7.
Таблица 7. Значения, возвращаемые функцией MsgBox
Например, чтобы завершить выполнение макроса, если пользователь выбрал кнопку «Отмена», можно записать инструкцию: If answer = 2 Then Exit Sub или If answer = vbCancel Then Exit Sub где answer – значение, возвращенное MsgBox. При указании файла помощи в окно необходимо добавить кнопку Справка, что выполняется добавлением в аргумент «кнопки» константы vbMsgBoxHelpButton. Для организации ввода данных в режиме диалога с пользователем используется функция InputBox, отображающая на экране окно, всегда содержащее кнопки «ОК» и «Cancel» и поле для ввода данных. Общий вид записи: s = InputBox(сообщение[,заголовок][,знач_по_умолч][,X][,Y][,HelpFile,Context) Сообщение – символьная константа или переменная длиной до 230 символов. Заголовок – символьная константа или переменная, содержащая текст заголовка окна. Знач_по_умолч – символьная константа или переменная, задающая текст, отображаемый в поле ввода по умолчанию. X – число, задающее смещение окна диалога от левого края экрана. Y – число, задающее смещение окна диалога от верхнего края экрана. Значения X и Y измеряются в твипах, один твип приблизительно равен 0.0007 дюйма. Значения необязательных аргументов HelpFile и Context аналогичны аргументам функции MsgBox. При определении файла помощи в окно автоматически будет добавлена кнопка «Справка». Например, инструкция S = InputBox(“Введите Ваше Имя”, “Регистрация”) отобразит на экране окно, показанное на рисунке 7.
Рис. 7. Пример окна ввода
Если включить в список аргументов значение по умолчанию, то оно будет присутствовать в поле ввода при отображении окна (рисунок 8).
Рис. 8. Поле ввода содержит значение, установленное по умолчанию
Переменная S будет содержать текстовое значение, введенное пользователем. Если пользователь выбрал кнопку «Cancel», то функция возвращает строку нулевой длины. В данном случае завершение работы макроса может быть записано в виде: If S = ”” Then Exit Sub Обратите внимание – внутри кавычек пробела нет! Так записывается строка нулевой длины. Конечно, макрос может и не завершаться при нажатии кнопки Cancel, все зависит от алгоритма работы вашей процедуры. При анализе ответа пользователя следует помнить, что сравнение текстовых строк выполняется посимвольно, т.е. строки «Пример» и «пример» – это две разные строки, т.к. первые символы введены в разных регистрах. В этом случае можно воспользоваться встроенными функциями VBA для работы со строками. Перечень функций VBA, сгруппированных по категориям, можно получить, если открыть окно просмотра объектов в редакторе VBA, нажав клавишу F2. Далее в списке «Project/Library» выберите «VBA». В списке «Classes» показаны различные категории объектов, функций, процедур и констант, определенных VBA. Найдите нужную категорию функций (Conversion (преобразование типа), DateTime (дата и время), Information (информационные), Math (математические) или Strings (текстовые)). Список функций указанной категории отобразится в соседнем поле. Щелкните на кнопке со знаком вопрос, чтобы получить справку по выделенной функции. Краткая информация о функции отображается внизу окна.
Дата добавления: 2014-12-07; Просмотров: 707; Нарушение авторских прав?; Мы поможем в написании вашей работы! Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет |