Информационные системы и технологии в экономике
..pdfФункции Asc(строка) и Chr(код) позволяют получить ASCII-код начальной буквы строки и, наоборот, по ASCII-коду получить соответствующую букву. Для функции Chr() код может принимать значения от 0 до 255. Значения от 0 до 31 соответствуют управляющим кодам
(например, Chr(13) вернёт символ перехода на новую строку). Для обозначения некоторых часто употребляемых клавиш в VBA имеются встроенные константы, например, для клавиши <Enter> – vbCr, для клавиши
<Tab> – vbTab, для клавиши <Backspace> – vbBack.
Примеры:
debug.Print Asc("F")
70
debug.Print Chr(97)
a
Msgbox "Этот текст расположен" & vbCr & "в две
строки".
Функция Len(строка) определяет длину строки.
Пример:
debug.Print Len("http://www.tusur.ru/")
20
Функции Left(строка, количество) и Right(строка, количество)
возвращают подстроки, состоящие из заданного количества соответственно первых и последних символов данной строки. Функция Mid(строка,
позиция, количество) возвращает подстроку, содержащую заданное количество символов, начиная с указанной позиции.
Пример:
debug.Print Left("http://www.tusur.ru", 4)
http
debug.Print Right("http://www.tusur.ru", 2)
ru
debug.Print Mid("http://www.tusur.ru", 12, 5)
31
tusur
Функции InStr([старт], строка1, строка2, [сравнение]) и
InStrRev(строка1, сторка2, [старт], [сравнение]) возвращают позицию первого вхождения строки2 в строку1, начиная соответственно с ее начала и с конца. Если вхождения нет, то возвращается 0. Параметр сравнение указывает способ сравнения строк, значения: 0 или vbBinaryCompare для двоичного сравнения, 1 или vbTextCompare для посимвольного сравнения без учета регистра.
debug.Print InStr(1, "Microsoft Office", "office",
vbTextCompare)
11
debug.Print InStr(1, "Microsoft Office", "office",
vbBinaryCompare)
0
Функции обработки даты и времени
В VBA имеется несколько функций даты и времени, которые позволяют производить самые разнообразные действия от определения текущей даты до сложения нескольких дат.
Функции Date, Time и Now возвращают значения типа Variant (Date),
содержащие соответственно текущие дату, время и одновременно дату и время.
Пример:
debug.Print Date
20.10.2011
debug.Print Time
13:18:02
debug.Print Now
20.10.2011 13:18:02
32
Функции Hour(время), Minute(время), Second(время) и Day(дата),
Month(дата), Year(дата) возвращают значения типа Variant (Integer),
являющиеся целыми числами, которые представляют собой соответственно
час, минуту, секунду и день, месяц, год в значении даты.
Пример:
debug.Print Hour(Now), Minute(Now), Second(Now)
13 18 55
debug.Print Day(Now), Month(Now), |
Year(Now) |
||
20 |
10 |
2011 |
|
Функция DatePart(интервал, дата [, день_недели, неделя_года]
возвращает значение типа Variant (Integer), содержащее указанную часть даты. Параметр интервал – строковое значение, обозначающее какой временной интервал должен быть найден, допустимые значения – "yyyy" (год), "q" (квартал), "m" (месяц), "y" (день года), "d" (день месяца), "w" (день недели), "ww" (неделя), "h" (час), "m" (минута), "s" (секунда); параметр дата – дата, часть которой необходимо найти; параметры день_недели и неделя_года – необязательные параметры, указывающие первый день недели и первую неделю года.
Пример:
debug.Print DatePart("w", #01-01-2011#)
7
Функция DateDiff(интервал, дата1, дата2 [, день_недели,
неделя_года] возвращает значение типа Variant (Long), содержащее временной интервал между двумя датами. Параметр интервал – строковое значение, обозначающее какой временной интервал необходимо различать,
допустимые значения – "yyyy" (год), "q" (квартал), "m" (месяц), "y" (день года), "d" (день месяца), "w" (день недели), "ww" (неделя), "h" (час), "m" (минута), "s" (секунда); параметры дата1 и дата2 – две даты, разность между которыми необходимо найти; параметры день_недели и неделя_года –
33
необязательные параметры, указывающие первый день недели и первую
неделю года.
Пример:
debug.Print DateDiff("yyyy", #01-10-2000#, #01-09-
2011#)
11
Функция DateAdd(интервал, количество, дата) возвращает значение типа Variant (Date), содержащее дату, которой добавлено указанное количество времени. Параметр интервал – строковое значение,
обозначающее какой временной интервал необходимо добавить, допустимые значения – "yyyy" (год), "q" (квартал), "m" (месяц), "y" (день года), "d" (день месяца), "w" (день недели), "ww" (неделя), "h" (час), "m" (минута), "s" (секунда); параметр количество – число, обозначающее количество времени,
которое необходимо добавить к параметру дата.
Пример:
debug.Print DateAdd("yyyy", 5, #01-10-2000#)
10.01.2005
Некоторые функции проверки типов
Функции проверки типов необходимы в то случае, когда нужно определить, является ли значение переменной значением необходимого типа.
Функция |
Проверяемый тип |
|
|
IsArray |
если переменная является массивом – возвращает True, |
|
иначе – False |
|
|
IsDate |
если переменная содержит дату – возвращает True, иначе – |
|
False |
|
|
IsEmpty |
была ли переменная инициализирована – возвращает True, |
|
иначе – False |
|
|
IsNull |
если переменная содержит какое-либо значение – |
|
возвращает True, иначе – False |
|
|
34
Функция |
|
|
Проверяемый тип |
|
|
|
|
IsNumeric |
|
если переменная является числом – возвращает True, иначе |
|
|
|
– False |
|
|
|
|
|
Функции преобразования типов |
|||
|
|
|
|
|
Функция |
Возвращаемый тип |
|
|
|
|
|
CBool |
|
|
Boolean |
CByte |
|
|
Byte |
CCur |
|
|
Currency |
CDate |
|
|
Date |
CDbl |
|
|
Double |
CDec |
|
|
Decimal |
CInt |
|
|
Integer |
CLng |
|
|
Long |
CSng |
|
|
Single |
CVar |
|
|
Variant |
CStr |
|
|
String |
Форматирование значений разных типов
Функция Format(выражение [, формат, день_недели, неделя_года])
возвращает значение типа Variant (String), содержащее выражение,
отформатированное согласно заданному формату; параметры день_недели и неделя_года – необязательные параметры, указывающие первый день недели и первую неделю года.
Ниже перечислены некоторые форматы для представления значений.
Формат Описание
General Number Число без разделителя тысяч
Currency Число в денежном формате, используя настройки операционной системы
35
Формат |
Описание |
|
|
Fixed |
Число, у которого отображается хотя бы одна цифра |
|
слева и две справа от десятичного символа |
|
|
Standard |
Число, у которого отображается хотя бы одна цифра |
|
слева, две справа от десятичного символа и разделитель |
|
тысяч |
|
|
Percent |
Число в процентном формате с двумя цифрами справа от |
|
десятичного символа |
|
|
Scientific |
Число в формате с плавающей точкой |
|
|
Yes / No |
No, если число равно 0, Yes в противном случае |
|
|
True / False |
False, если число равно 0, True в противном случае |
|
|
On / Off |
Off, если число равно 0, On в противном случае |
|
|
General Date |
Отображает дату или время |
|
|
Long Date |
Дата в полном формате |
|
|
Medium Date |
Дата в обычном формате |
|
|
Short Date |
Дата в сокращенном формате |
|
|
Long Time |
Время с часами, минутами и секундами |
|
|
Medium Time |
Время с часами и минутами в 12-часовом формате |
|
|
Short Time |
Время с часами и минутами в 24-часовом формате |
|
|
Примеры: |
|
debug.Print Format(456789.0123, "General Number")
456789,0123
debug.Print Format(456789.0123, "Currency")
456 789,01р.
debug.Print Format(456789.0123, "Fixed")
456789,01
debug.Print Format(456789.0123, "Standard")
456 789,01
debug.Print Format(456789.0123, "Scientific")
4,57E+05
36
debug.Print Format(#01-01-2011#, "General Date") 01.01.2011
debug.Print Format(#01-01-2011#, "Long Date") 1 Январь 2011 г.
debug.Print Format(#01-01-2011#, "Medium Date") 01-янв-11
debug.Print Format(#01-01-2011#, "Short Date") 01.01.2011
debug.Print Format(#13:50:50#, "Long Time") 13:50:50
debug.Print Format(#13:50:50#, "Medium Time") 01:50
debug.Print Format(#13:50:50#, "Short Time") 13:50
Если же нужного формата нет, можно настроить вид отображения выводимого значения при помощи пользовательских форматов с использованием специальных символов "0", "#", "%", ",", ":", "/", ("E+", "E–", "e+", "e–"), ("d", "m", "s"), ("h", "m", "s").
Примеры:
debug.Print Format(125 / 2, "###.###")
62,5
debug.Print Format(125 / 2, "000.000")
062,500
debug.Print Format(125 / 2, "#.##e+##")
6,25e+1
debug.Print Format(#01-01-2011#, "dd/mm/yy")
01.01.11
debug.Print Format(#13:50:50#, "hh:mm:ss")
13:50:50
37
Для форматирования чисел в VBA имеется отдельная функция
FormatNumber(число [, число_знаков, ведущий_ноль, отрицательные,
группировать]), где число – то число, которое нужно отформатировать;
число_знаков – параметр, задающий число знаков после десятичного символа (значения – vbTrue, vbFalse, vbUseDefault); ведущий_ноль –
параметр, указывающий надо ли отображать нулевую целую часть (значения
– vbTrue, vbFalse, vbUseDefault); отрицательные – параметр, указывающий,
надо ли отображать отрицательные значения в скобках (значения – vbTrue, vbFalse, vbUseDefault); группировать – параметр, указывающий, надо ли группировать цифры (значения – vbTrue, vbFalse, vbUseDefault).
Примеры:
debug.Print FormatNumber(sin(5), 4)
-0,9589
debug.Print FormatNumber(sin(5), 4, vbFalse)
-,9589
debug.Print FormatNumber(sin(5), 4, vbFalse,
vbTrue)
(,9589)
Для форматирования процентов в VBA имеется отдельная функция
FormatPercent, которая имеет такой же синтаксис, как и FormatNumber.
Для форматирования денежных значений в VBA имеется отдельная функция FormatCurrency, которая имеет такой же синтаксис, как и
FormatNumber.
Для форматирования значений даты и времени в VBA имеется отдельная функция FormatDateTime(дата[, формат]), которая имеет такой же синтаксис, как и FormatNumber. где дата – параметр, задающий дату,
которую необходимо отформатировать; формат – необязательный параметр,
указывающий нужное форматирования (значения – vbGeneralDate, vbLongDate, vbShortDate, vbLongTime, vbShortTime).
38
Отладка, использование среды для отладки программ
Поскольку идеальных программистов не существует, в большинстве систем разработки программ имеются инструменты, с помощью которых можно решить проблемы, возникающие в процессе программирования. В VBA также есть средства, которые позволяют либо исключить ошибки при разработке, либо задать обработку ошибок при выполнении программ.
Отладка программ – это проверка и внесение исправлений в программу при её разработке. Отладка позволяет идентифицировать ошибки,
допущенные при программировании (синтаксические – ошибки в выражениях и именах, и логические – в логике работы программы).
Обработка ошибок – это задание реакции на ошибки, которые возникают при выполнении программы. Их причиной могут быть как ошибки программиста, так и внешние факторы – отсутствие нужных файлов,
отказы аппаратуры, неправильные действия пользователя.
Типы ошибок. Ошибки в программе делятся на три категории:
Ошибки компиляции – возникают, когда компилятор не может интерпретировать введённый текст. Некоторые ошибки компиляции обнаруживаются при вводе, а другие – перед выполнением программы. Такие ошибки легко определить и исправить, поскольку VBA выявляет их автоматически, а сами ошибки очевидны.
Примечание. VBA автоматически компилирует программу каждый раз при запуске на выполнение после внесения изменений. Можно также запустить компиляцию командой Отладка – Компилировать.
Ошибки выполнения – возникают при выполнении программы после успешной компиляции. Их причиной обычно является отсутствие данных или неправильная информация, введённая пользователем. Такие ошибки идентифицируются VBA с указанием инструкции, при выполнении которой произошла ошибка. Для исправления таких ошибок обычно приходится выводить значения переменных или другие данные, которые влияют на успешное выполнение программы.
39
Логические ошибки трудно заметить и устранить. Они не приводят к прекращению компиляции или выполнения, однако являются причиной того,
что программа не выдаёт желаемых результатов. Выявление таких ошибок производят путём тщательной проверки с помощью средств отладки VBA.
Средства отладки. В VBA имеется большое количество средств,
предназначенных для отладки программ. К ним относятся: использование оператора Option Explicit, пошаговое выполнение программы, работа в режиме прерывания, использование точек останова, вывод значений переменных.
Использование Option Explicit. Данный оператор описания требует явного задания переменных в программах. При его использовании возникает ошибка компиляции при неправильном написании имени переменной или использовании неописанной переменной. Кроме того, явное описание переменных позволяет обойтись без использования типа данных Variant и
связанных с его использованием ошибок при неявном приведении типов данных.
Пошаговое выполнение программы. Этот режим служит для локализации ошибок в теле программы. Для его запуска используются команды меню, клавиатура или панель инструментов Отладка,
отображаемая командой Вид - Панели инструментов - Отладка. В меню и на панели инструментов имеются четыре команды (кнопки) для выполнения программы в пошаговом режиме.
Команда Отладка – Шаг с заходом (клавиша <F8>) позволяет выполнить одну строку программы и перейти к следующей. Если следующая строка – вызов процедуры, то происходит переход к первому выполняемому оператору этой процедуры.
Команда Отладка – Шаг с обходом (клавиши <Shift+F8>) также выполняет одну строку программы, но если строкой является вызов процедуры, то она выполняется как одна инструкция. Данная команда используется, если известно, что эта процедура работает правильно.
40