- •Современные офисные пакеты
- •6.5. Прикладные системы подготовки текстов
- •Макроязыки офисного приложения
- •Структура редактора vba
- •Типы данных и переменные vba
- •5.3. Типы данных в vba
- •Классы и объекты.
- •Операторы условного перехода, операторы в vba.
- •Циклические операторы vba
- •9.18. Оператор цикла While…Wend
- •9.19. Оператор цикла For…Next
- •Строковые функции
- •Математические функции
- •Функции преобразования типов в vba.
- •Использование функций преобразования типов
- •Диалоговые окна
- •Основные элементы управления
- •Общие свойства элементов управления Кратко о некоторых элементах управления Некоторые общие свойства элементов управления
- •Некоторые элементы управления
- •Операции с файлами
- •Работы с массивами и строками
- •Объявление массивов Объявление фиксированных массивов
- •Объявление динамических массивов
Объявление динамических массивов
Динамические массивы объявляться так:
?
1 2 3 |
' Обратите внимание, что границы не указываются Dim arrOpen1() as Single Dim arrOpen2() |
Однако, использовать их после такого объявления пока ещё нельзя. Необходимо выделить память под массив. Особенность работы с динамическим массивом как раз состоит в том, что программист отвечает за его своевременное расширение (усечение) в памяти. Для этого существует специальный оператор, который имеет следующий синтаксис:
ReDim [Preserve] varname(subscripts) [As Type]
Например:
?
1 |
ReDim arrOpen(5) |
После этого оператора, вы можете использовать элементы массива arrOpen с 0-го по 5-й. Всё, что мы говорили про оператор option base и нижнюю границу, верно и для динамических массивов. Предположим, что вы сохранили информацию в элементах 0-5 и у вас поспела новая порция информации для элементов 6-11. Чтобы разместить в данном массиве новые элементы и не потерять старые, вы должны сделать следующее:
?
1 |
ReDim Preserve arrOpen(11) |
то есть мы тут увеличиваем верхнюю границу массива и используем ключевое слово Preserve, чтобы во время этой операции не потерять текущее содержимое arrOpen, так как в противном случае (без слова Preserve) массив будет расширен, а память заполнена нулями. Вы также вправе вообще не декларировать массив оператором Dim, а сделать это впервые через ReDim и там же указать лип элементов. Но, если вы в первом ReDim (или Dim) указали определенный тип элементов, то в последующих операторах ReDim этот тип переопределён быть не может - возникнет ошибка на этапе компиляции проекта.
Работа со строками
В VBA имеется довольно богатая коллекция операторов и функций для форматирования строк и извлечения тех их частей, которые вы сочтете особенно привлекательными. В табл. 11.3 я представил все относящиеся к строкам команды, которые мне удалось обнаружить.
Таблица 11.3. Операторы и функции для обработки строк
Не забывайте, что буквальные строковые значения (в отличие от переменных, содержащих строковые значения) должны заключаться в кавычки.
Оператор или функция |
Тип |
Выполняемые действия (для операторов) или возвращаемые значения (для функций) |
Asc (строка) |
Функция |
Числовой код первого символа в строке |
Chr (код_символа) |
функция |
Символ, соответствующий значению параметра код_символа |
Filter ( массив_источник, эталон, включает, метод сравнения) |
Функция (только в VBA6) |
Массив, состоящий только из тех строк из массива источника, которые содержат эталон. Аргумент массив_истчник должен быть массивом строковых значений. Если необязательный аргумент включает равен False, то функция возвратит только строки, которые не включают эталон |
Format (строка) |
Функция |
См. выше раздел "Форматирование данных" |
Hex (число) |
Функция |
Строка, содержащая шестнадцатеричное представление числа |
InStr (старт, строка1, строка2) |
Функция |
Число, соответствующее позиции строки 2 в строке 1; поиск начинается с позиции старт, этот аргумент не обязателен |
InStrRev (строка 1, строка2, старт) |
функция (только в VBA6) |
Число, соответствующее позиции строки 2 в строке 1, считая с правого края строки 1; поиск начинается с позиции старт, этот аргумент не обязателен |
Join (массив_строк, разделитель) |
функция (только B VBA6) |
Одна строка, комбинирующая все строки из массив_строк, который должен быть массивом строковых данных. По умолчанию Join вставляет пробел между строками, взятыми из массива строк, но можно задать и другой символ разделителя (символ необходимо заключить в кавычки) |
Left (строка, длина) |
Функция |
Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с левого края последней |
Len (строка) |
Функция |
Число символов в строке |
LCase (строка) |
Функция |
Копия строки, представленная символами нижнего регистра |
LSet строковая_ переменная = строка |
Оператор |
Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки начиная с левого края переменной |
LTrim (строка) |
Функция |
Новая строка, содержащая копию данной строки без пробелов в начале |
Mid(строка, старт, длина) |
Функция |
Новая строка заданной длины из символов данной строки, взятых подряд, начиная с позиции старт |
Mid(строковая переменная, старт, длина) = строка |
Оператор |
Начиная с позиции старт заменяет символами данной строки заданное аргументом длина число символов в строковой переменной |
Oct(число) |
Функция |
Строка, содержащая восьмеричное представление числа |
Replace(строка, найти, заменить, старт, число_замен, метод_сравнения) |
Функция (только в VBA6) |
Новая строка, получаемая в результате замены в заданной строке текста найти текстом заменить. Аргументы старт, число_замен и метод_сравнения не обязательны. Используйте число_замен, чтобы указать, сколько замен следует сделать, если текст найти встречается несколько раз (по умолчанию заменяются все случаи появления текста найти в строке) |
Right (строка, длина) |
Функция |
Строка указанной длины из символов, взятых подряд из строки, задаваемой аргументом строка, начиная с правого края последней |
RSet строковая_ переменсная = строка |
Оператор |
Устанавливает значение строковой переменной, равное заданной строке, без изменения длины этой строковой переменной и с размещением заданной строки с правого края переменной |
RTrim (строка) |
Функция |
Новая строка, содержащая копию данной строки без пробелов в конце |
Space (число) |
Функция |
Строка, состоящая из указанного числа пробелов |
Split(строка, разделитель, предел, метод сравнения) |
Функция (только B VBA6) |
Массив строк, полученный в результате разделения в заданной строки. По умолчанию оригинальная строка разделяется по пробелам, но можно задать разделитель, отличный от пробела (для задания разделителя используйте символ, заключенный в кавычки). Необязательный аргумент предел задает максимальное число строк в возвращаемом массиве |
StrComp(строка1, строка2) |
Функция |
О, если две строки равны; -1,если строка 1 меньше, чем строка 2; 1, если строка! больше, чем строка 2 (о сравнении строк говорилось в главе 9) |
StrConv(строка, метод перевода) |
Функция |
Новая строка, созданная на основе заданной указанным методом перевода |
String(число, символ) |
Функция |
Строка, состоящая из заданного числа повторяющихся символов |
StrReverse (строка) |
Функция(только VBA 6) |
Строка, содержащая символы заданной строки в обратном порядке |
Trim(строка) |
Функция |
Новая строка, содержащая копию данной строки без пробелов в начале и конце |
UCase(строка) |
Функция |
Копия строки, представленная символами верхнего регистра |
При задании аргументов не забывайте заключать буквальные значения дат в пару символов #, а строковые значения типа интервалов дат - в кавычки.
Имя |
Тип |
Выполняемые действия (для операторов) или возвращаемые значения (для функций) |
Date |
Функция |
Текущая системная дата |
Date (дата) |
Оператор |
Устанавливает системную дату по значению аргумента дата |
DateAdd (интервал, число, дата) |
Функция |
Новое значение даты, равное сумме исходной даты и казенного числа заданных интервалов даты или времени |
DateDiff (интервал, дата1, дата2) |
Функция |
Число указанных интервалов даты или времени, помещающихся в отрезке времени между датами 1 и 2 |
DatePart (интервал, дата) |
функция |
Целое значение, представляющее указанный интервал даты |
DateSerial (год, месяц, день) |
Функция |
Значение даты, определяемое аргументами год, месяц, день, которые должны быть числовыми |
DateValue (строка с датой) |
Функция |
Значение даты, соответствующее строке с датой |
Day (дата) |
Функция |
Целое значение, соответствующее дню месяца, заданного датой |
Hour (время) |
Функция |
Целое значение между 0 и 23 включительно, представляющее час суток, заданный указанным временем |
Minute (время) |
Функция |
Целое значение между 0 и 59 включительно, представляющее минуты, заданные указанным временем |
Month (дата) |
Функция |
Целое значение между 0 и 12 включительно, представляющее месяц, заданный указанной датой |
MonthName (месяц, сократить) |
Функция (только в VBA 6) |
Строка, содержащая название месяца, соответствующего аргументу месяц, который должен быть числом от 1 до 12. Если необязательный аргумент сократить указан и равен True, то возвращаемая строка будет содержать сокращенное название месяца |
NOW |
Функция |
Значение, представляющее текущие системные дату и время |
Second(время) |
Функция |
Целое значение между 0 и 59 включительно, представляющее секунды, заданные указанным временем |
Time |
Функция |
Значение, представляющее текущее системное время |
Time (время) |
Оператор |
Устанавливает системное время по значению аргумента время |
Timer |
Функция |
Число секунд, прошедших с полуночи |
TimeSerial (часы, минуты, секунды) |
Функция |
Значение времени, заданное аргументами часы, минуты, секунды |
TimeValue (строка_с_временем) |
Функция |
Значение времени, соответствующее строке со временем (вся информация о дате будет отброшена) |
Weekday (дата) |
Функция |
Целое число, представляющее день недели, соответствующий указанной дате |
WeekdayName (день_не дели, сократить, первый день недели) |
Функция |
Строка, содержащая название дня недели, заданного (только в аргументом де н ь _ н е де л и, который должен VBA 6) быть целым числом от 1 до 7. Если необязательный аргумент с о к р а т и т ь указан и равен True, то возвращаемая строка будет содержать сокращенное название дня недели. Нумерацию дней недели можно менять, задавая необязательный аргумент первый _ день _ недели равным константам типа vbMonday, vbTuesday и т.д. |
Year(дата) |
Функция |
Целое число, представляющее год, соответствующий указанной дате |
