Процедуры и функци, их вызов и передача параметров
Основными компонентами программы на VBA являются процедуры и функции. Они представляют собой фрагменты программного кода, заключенные между операторами Вот как может выглядеть процедура VBA: Sub <имяПроцедуры> (<аргумент1>, <аргумент2>,...) <операторVisualBasic1> <операторVisualBasic2> End Sub Функция отличается от процедуры тем, что ее имя выступает также в качестве переменной и используется для возвращения значения в точку вызова функции. Вот как может выглядеть функция: Function <имяФункции> (<аргумент1>, <аргумент2>,...) <операторVisualBasic1> Способ передачи параметров процедуре или функции указывается при описании ее аргументов (формальных параметров). Имени аргумента может предшествовать явный описатель способа передачи (ByRef - задает передачу по ссылке, а ByVal - по значению). Если же явное указание способа передачи параметра отсутствует, то по умолчанию подразумевается передача по ссылке. Каждая из процедур, находящихся в одном модуле, должна иметь уникальное имя, однако в проекте может содержаться несколько различных модулей. Обычно рекомендуется использовать только уникальные имена процедур в одном проекте, но допустимы и исключения. В том случае, если в проекте содержится несколько различных процедур с одним и тем же именем, следует для уточнения имени использовать при вызове процедуры следующий синтаксис: <имяМодуля>.<имяПроцедуры> Если при этом имя модуля состоит из нескольких слов, следует заключить это имя в квадратные скобки. Например, если модуль называется "Графические процедуры", а процедура - "Крестик", вызов может выглядеть следующим образом:[Графические процедуры].КрестикДопускается также использование процедур, расположенных и в других проектах. При этом может потребоваться еще один уровень уточнения имени: <имяПроекта>.<имяМодуля>.<имяПроцедуры>
ФУНКЦИИ ПРЕОБРАЗОВАНИЯ И ПРОВЕРКИ ТИПОВЫХ ДАННЫХ Встроенные функции преобразования и проверки типов данных VBA, функции CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr(), Str(), Val(), IsNumeric(), IsDate(), IsEmpty(), IsError(), IsMissing(), IsNull(), IsObject(), IsArray(), Hex(), Oct() В программах на VBA очень часто приходится преобразовывать значения из одного типа данных в другой. Несколько типичных ситуаций, когда этим приходится заниматься: преобразование из строкового значение в числовое при приеме значения от пользователя через InputBox(); преобразование значения даты/времени в строковое, когда нам нужно отобразить дату или время единообразно вне зависимости от региональных настроек на компьютерах пользователей; преобразование значения из строкового в дату/время для применения специальных функций даты/времени. Чаще всего для конвертации типов данных используются функции, имя которых выглядит как C (от слова Convert) + имя типа данных. Вот перечень этих функций: CBool(), CByte(), CCur(), CDate(), CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr(). Просмотреть, что в итоге получилось, можно при помощи функции TypeName(), например: nVar1 = CInt(InputBox("Введите значение")) MsgBox TypeName(nVar1) Кроме того, еще несколько полезных для конвертации функций: Str() — позволяет перевести числовое значение в строковое. Делает почти то же самое, что и CStr(), но при этом вставляет пробел впереди для положительных чисел. Val() — "вытаскивает" из смеси цифр и букв только числовое значение. При этом эта функция читает данные слева направо и останавливается на первом нечисловом значении (допускается единственное нечисловое значение — точка, которая будет отделять целую часть от дробной). Очень удобно, когда у нас вперемежку с числовыми данными прописываются единицы измерения или валюта.
Чтобы не возникло ошибок при конвертации, можно вначале проверять значения на возможность конвертации при помощи функций IsNumeric() и IsDate(). Для проверки на соответствие специальным значениям можно использовать функции IsArray(), IsEmpty(), IsError(), IsMissing(), IsNull() и IsObject(). Все эти функции возвращают True или False в зависимости от результатов проверки переданного им значения. Для того, чтобы преобразовать десятичные данные в строковое представление шестнадцатеричных и восьмеричных значений, используются функции Hex() и Oct(). Для обратного преобразования специальных функций не предусмотрено, но вы можете указать компилятору VBA, что эти числа записаны в шестнадцатеричном или восьмеричном формате, записав их, например, как &O12 и &HA. СТРОКОВЫЕ ФУНКЦИИ Строковые функции VBA, Asc(), Chr(), InStr(), Len(), LCase(), UCase(), Replace(), Trim() Это — наиболее часто используемые функции. Требуются они постоянно, и знать их необходимо очень хорошо. ASC() — эта функция позволяет вернуть числовой код для переданного символа. Например, ASC("D") вернет 68. Эту функцию удобно использовать для того, чтобы определить следующую или предыдущую букву. Обычно она используется вместе с функцией Chr(), которая производит обратную операцию — возвращает символ по переданному его числовому коду. Например, такой код в Excel позволяет написать в ячейки с A1 по A20 последовательно буквы русского алфавита от A до У: Dim n, nCharCode As Integer n = 1 nCharCode = Asc("А") Do While n <= 20 ActiveWorkbook.ActiveSheet.Range("A" & n).Value = Chr(nCharCode) n = n + 1 nCharCode = nCharCode + 1 Loop Варианты этой функции — AscB() и AscW(). AscB() возвращает только первый байт числового кода для символа, а AscW() возвращает код для символа в кодировке Unicode. Chr() — очень важная функция. Возвращает символ по его числовому коду InStr() и InStrRev() — одна из самых популярных функций. Позволяет обнаружить в теле строковой переменной последовательность символов и вернуть ее позицию. Если последовательность не обнаружена, то возвращается 0. Left(), Right(), Mid() — возможность взять указанное вами количество символов из существующей строковой переменной слева, справа или из середины соответственно. Len() — возможность получить число символов в строке. Часто используется с циклами, операциями замены и т.п.
LCase() и UCase() — перевести строку в нижний и верхний регистры соответственно. Часто используется для подготовки значения к сравнению, когда при сравнении регистр не важен (фамилии, названия фирм, городов и т.п.). LSet() и RSet() — возможность заполнить одну переменную символами другой без изменения ее длины (соответственно слева и справа). Лишние символы обрезаются, на место недостающих подставляются пробелы. LTrim(), RTrim(), Trim() — возможность убрать пробелы соответственно слева, справа или и слева, и справа. Replace() — возможность заменить в строке одну последовательность символов на другую. Space() — получить строку из указанного вами количества пробелов; String() — получить строку из указанного вами количества символов (которые опять-таки указываются вами). Обычно используются для форматирования вывода совместно с функцией Len(). Еще одна похожая функция — Spc(), которая используется для форматирования вывода на консоль. Она размножает пробелы с учетом ширины командной строки. StrComp() — возможность сравнить две строки. StrConv() — возможность преобразовать строку (в Unicode и обратно, в верхний и нижний регистр, сделать первую букву слов заглавной и т.п.). StrReverse() — "перевернуть" строку, разместив ее символы в обратном порядке. Tab() — еще одна функция, которая используется для форматирования вывода на консоль. Размножает символы табуляции в том количестве, в котором вы укажете. Если никакое количество не указано, просто вставляет символ табуляции. Для вставки символа табуляции в строковое значение можно также использовать константу vbTab.
Воспользуйтесь поиском по сайту: ©2015 - 2024 megalektsii.ru Все авторские права принадлежат авторам лекционных материалов. Обратная связь с нами...
|