Вбудовані функції і оператори VBA

Вбудовані функції і оператори

У мові VBA існує безліч вбудованих функцій і операторів. Вони перераховані в табл. 7.1. Ми розглянемо ті з них, які використовуються найчастіше.
Для спрощення опису ми використовуємо прийняті в Microsoft позначення, наприклад, для позначення необов'язкових параметрів будемо застосовувати квадратні дужки. Скажімо, в наступній процедурі другий параметр є необов'язковим:
Sub ChangeFormat (FontName [. FontSize[)
Зверніть увагу на те, що в даному випадку не зазначений тип даних. Втім, про це ми поговоримо пізніше.
Таблиця 7.1. Функції VBA
Abs
DoEvents
IsEmpty
Right
Array
Environ
IsError
RightB
Asc
EOF
IsMissing
Rnd
AscB
Error
IsNull
Round*
AscW
Exp
IsNumeric
RTrim
Atn
FileAttr
IsObject
Second
CallByName*
FileDateTime
Join*
Seek
Cbool
FileLen
Lbound
Sgn
Cbyte
Filter*
Lease
Shell
Ccur
Fix
Left
Sin
Cdate
Format
LeftB
SLN
CDbl
FormatCurrency*
Len
Space
Cdec
FormatDateTime*
LenB
Spc
Choose
FormatNumber*
LoadPicture
Split*
Chr
FormatPercent*
Loc
Sqr
ChrB
FreeFile
LOF
Str
ChrW
FV
Log
StrComp
Cint
GetAIISettings
Ltrim
StrConv
CLng
GetAttr
Mid
String
Command
GetAutoServerSettings
MidB
StrReverse*
Cos
GetObject
Minute
Switch
CreateObject
GetSettings
MIRR
SYD
CSng
Hex
Month
Tab
CStr
Hour
MonthName*
Tan
CurDir
I if
MsgBox
Time
Cvar
IMEStatus
Now
Timer
CVDate
Input
Nper
TimeSerial
CVErr
Inputs
NPV
TimeValue
Date
InputBox
Oct
Trim
DateAdd
InStr
Partition
TypeName
DateDiff
InStrB
Pmt
UBound
DatePart
InstrRev*
PPmt
UCase
DateSerial
Int
PV
Val
DateValue
Ipmt
QBColor
VarType
Day
IRR
Rate
WeekdayWeekdayname*
DDB
IsArray
Replace*
Year
Dir
Isdate
RGB

* — функции, помеченные этим значком, существуют только в пакете Office 9/10
Функція Msg Box
 Ви вже не раз стикалися з функцією MsgBox раніше. Тепер поговоримо про неї більш докладно. Вона використовується для виводу на екран інформаційного вікна, яке зникає після того, як користувач натисне кнопку. Найчастіше опис цієї функції виглядає наступним чином: MsgBox (prompt [. Buttons[ [. Title[)
Це аж ніяк не повний опис синтаксису. Існують необов'язкові параметри, пов'язані з контекстом підказки, про які ви можете дізнатися в довідковій документації.
Prompt - параметр типу String, що містить повідомлення, яке показується в інформаційному вікні. Для створення повідомлення з декількох рядків використовується константа vbCrLf.
Buttons - параметр типу Long, що містить суму значень, які визначають різні властивості інформаційного вікна. Це число і тип показуваних кнопок, стиль значків, ідентичність заданих за замовчуванням кнопок і модальність вікна повідомлення. Модальне діалогове вікно (system modal dialog box) з'являється поверх всіх вікон, відкритих в даний момент, і саме в його поля здійснюється введення даних, в той час як режимне діалогове вікно (application modal dialog box) з'являється тільки поверх вікна додатка. Різні значення параметра Buttons показані в табл. 7.2. Вони ж формують перерахування VbMsgBoxStyle.
Наприклад, код MsgBox "Proceed?", vbQuestion + vbYesNo
призведе до появи інформаційного вікна, яке містить знак питання, напис Proceed? (Продовжувати?) І дві кнопки Yes (Так) і No (Ні). Його вигляд показаний на рис. 7.1.
Таблиця 7.2. Значення аргументу Buttons функції MsgBox
Назначение
Константа
Значение
Описание
Типи кнопок
VbOKOnly
0
З'являється тільки кнопка OK

VbOKCancel
1
З'являються кнопки ОК і Cancel

vbAbortRetrylgnore
2
З'являються кнопки Abort, Retry і Ignore

vbYesNoCancel
3
З'являються кнопки Yes, No й Cancel

VbYesNo
4
З'являються кнопки Yes і No

vbRetryCancel
5
З'являються кнопки Retry і Cancel
Типм значків
VbCritical
16
Показується значок критичного повідомлення

VbQuestion
32
Показується знак питання

vbExclamation
48
Показується знак попереджуючого повідомлення

vblnfbrmation
64
Показується знак інформаційного повідомлення
Кнопки по замовчуванню
vbDefaultButtonl
0
За замовчуванням береться перша кнопка

vbDefaultButton2
256
За замовчуванням береться друга кнопка

vbDefaultButton3
512
За замовчуванням береться третя кнопка

vbDefaultButton4
768
За замовчуванням береться четверта кнопка
Модальність
vbApplicationModal
0
З'являється режимне вікно діалогу

vbSystemModal
4096
З'являється модальне вікно діалогу
Параметр title являє собою рядковий вираз, показуване в рядку заголовка інформаційного вікна. Якщо цей аргумент пропустити, в рядку заголовка з'явиться напис "Microsoft Excel", як на рис. 7.1.

Рис. 7.1. Результат виконання функції MsgBox
Функція MsgBox повертає число, яке вказує, яку саме кнопку натиснув користувач. Можливі повертаються значення можна знайти в табл. 7.3. Крім того, вони об'єднані в перерахування VbMsgBoxResult.

Таблиця 7.3. Значення, що повертаються функції MsgBox
Константа
Значение
Описание
vbOK
1
Була натиснута кнопка ОК
vbCancel
2
Була натиснута кнопка Cancel
vbAbort
3
Була натиснута кнопка Abort
vbRetry
4
Була натиснута кнопка Retry
vblgnore
5
Була натиснута кнопка Ignore
vbYes
6
Була натиснута кнопка Yes
vbNo
7
Була натиснута кнопка No
Функція InputBox
 Функція InputBox виводить на екран вікно діалогу із запитом на введення даних користувачем. Найчастіше вона описується таким чином: InputBox (prompt [, title[ [, default[)
Змінна prompt задає повідомлення, показуване у вікні діалогу, а змінна title - повідомлення в рядку заголовка. Показуване за замовчуванням значення текстового поля визначається вмістом змінної default. Наприклад, код sName = InputBox("Enter your name.". "Name", "Albert")
призводить до появи діалогового вікна Name (Ім'я) з текстом Enter your name (Введіть ваше ім'я), показаного на рис. 7.2.
 

Рис. 7.2. Результат дії функції InputBox
Функція InputBox повертає рядок, яку користувач вводить в текстове поле. У нашому прикладі цей рядок буде містити змінна sName.

Цю функцію можна використовувати і для введення чисел. Повертану рядок, наприклад "12,55", можна перетворити в число 12,55 за допомогою функції Val, про яку ми поговоримо трохи пізніше.
Функції для обробки рядків
 Ось набір функцій, застосовуваних до рядків, що містять як константи, так і змінні
Функція Len
Функція Len повертає довжину рядка, тобто кількість вхідних в неї символів. Відповідно, код Len ("January Invoice") поверне значення 15.
Функції Ucase і LCase
Функції UCase і LCase міняють регістр літер у рядку на верхній або нижній відповідно. Код виглядає наступним чином:
UCase (string)
LCase (string)
Наприклад, код
MsgBox UCase ("Donna")
поверне рядок DONNA.
Функції Left, Right і Mid
Функції Left, Right і Mid повертають частину рядка. Зокрема, код Lefttstring. number)
повертає число number символів з початку рядка string. Код
Right (string. number)
повертає число number символів з кінця рядка string. Наприклад, код
MsgBox Right ("Donna Smith". 5) повертає значення Smith.
Функція Mid описується таким чином: Mid (string, start, length)
Вона повертає число знаків length рядки string, починаючи з позиції start. Наприклад, код
Mid ("Library.xls", 9,3) повертає значення xls. Якщо пропустити параметр length, наприкладMid("Library.xls",9)
буде повернений залишок рядка, починаючи з позиції start.
Функції InStr, InStrRev
 Синтаксис дуже корисної функції InStr виглядає наступним чином:
Instr (Start. StringToSearch. StringToFind)
Вона знаходить входження одного текстового рядка (StringToSearch) в інший текстовий рядок (StringToFind) і повертає положення початку шуканого тексту щодо крайнього лівого знака проглядається тексту. Змінна Start вказує позицію знака, з якою слід починати пошук. Якщо цей аргумент пропущено, він вважається рівним 1. Наприклад, код MsgBox Instrd. "Donna Smith". "Smith")
повертає значення 7, так як слово Smith починається з сьомої позиції рядка Donna Smith.
Функція InStrRev відрізняється тільки тим, що пошук ведеться у зворотному напрямку рядки StringToSearch.
Функція Replace
 Функція Replace, відсутнлатити в Excel 97, використовується для заміни одного набору знаків в рядку іншим. Наприклад, код: MsgBox Replace ("the car is red", "red", "blue") повертає рядок "the car is blue".
Функції Str і Val
 Функція Str перетворює число в рядок. Наприклад, код: Str (123)
повертає рядок 123. Функція Val має зворотне призначення, тобто перетворює рядок у число, з яким потім можна, наприклад, виконувати арифметичні операції. Скажімо, код Val ("4,5")
повертає число 4,5, а код Val ("1234 Main street")
повертає число 1234. Майте на увазі, що ця функція не розпізнає знак долара ($) і знак коми. Відповідно, код Val ($12)
поверне значення 0, а не 12.
Функції Trim, LTrim і RTrim
 Функція LTrim видаляє перші пробіли рядка. Відповідно, функція RTrim видаляє останні пробіли рядка. А функція Trim видаляє перший і останній пробіли одночасно. Наприклад, код Trim ("extra ") повертає слово extra.
Функції String і Space
 Функція String дозволяє швидко створити рядок, що складається з одного символу, повтореного задане число разів. Наприклад, код sText = String (25, "В") поміщає в змінну sText рядок, що містить 25 літер В. Функція Space повертає рядок, що складається із заданого числа прогалин. Тобто код
sText = Space (25) привласнює змінної sText рядок з 25 пробілів.

Оператор Like і функція StrCmp
 Оператор Like украй корисний при порівнянні двох рядків. Зрозуміло, для цього можна використовувати знак рівності, і вираз String1= String2 буде мати значення True при ідентичності двох рядків. Однак оператор Like дозволяє проводити порівняння з урахуванням регістра букв або перевіряти схожість з певним зразком. Вираз: string Like pattern повертає значення True, якщо рядок string відповідає заданим зразком pattern, і значення False у противному випадку. В дійсності вираз також може повернути результат Null. Тип порівнянної рядка, який використовує оператор Like, залежить від параметрів оператора Option Compare. У даному випадку існують два варіанти, які розміщуються в розділі опису модуля (в тому ж місці, де і оператор Option Explicit):
Option Compare Binary
Option Compare Text
За замовчуванням використовується перший варіант. При цьому порівняння символів рядка здійснюється у відповідності з кодом ANSI, як показано нижче:
А<В<... Якщо ж обраний варіант Option Compare Text, порівняння проводиться без урахування регістру літер, в залежності від локальних налаштувань вашого комп'ютера. Це наступний порядок порівняння символів:
A = a. При цьому останнім у порядку сортування тексту є символ "[", код ANSI якого дорівнює 91. Це корисно знати, якщо потрібно помістити останній пункт в алфавітному порядку, - просто укладете його в квадратні дужки.
Функції оператора Like дозволяють використовувати групові символи, а також списки і діапазони символів. Наприклад, знак питання? використовується для позначення довільного символу. Знак * означає групу символів. Знак # замінює будь-яку цифру від 0 до 9. Для пошуку збігів з будь-яким одиничним символом в списку charlist використовується позначення [charlist]. Якщо ж потрібно знайти збіг з будь-яким одиничним символом поза списком charlist, скористайтеся позначенням [Icharlist],
Більш детальну інформацію можна знайти в довідкових файлах редактора VBА.
Функція StrCmp також використовується для порівняння двох рядків. Її опис виглядає наступним чином: StrComp(string1, string2 [, compare[)
Повертане їй значення показує співвідношення між рядками string1 і string2. Це може бути значення більше, менше або дорівнює.

Інші функції і оператори

З безлічі функцій мови VBA ми зупинимося на функціях Is, що визначають атрибути змінної або об'єкта, функціях перетворення й функціях IIf і Switch, які повертають умовний результат.
Функції Is
Мова VBA містить ряд функцій Is, що повертається значення яких вказує, чи виконується певна умова стосовно аргументу. Ви вже стикалися з функцією IsMissing в одному з попередніх вправ. Ось ще кілька функцій з цього ж сімейства.
Функція IsDate
Ця функція вказує, чи можна перетворити вираз в дату. Призначення цієї функції для комірки приводить до оцінки її вмісту. Якщо вміст комірки є датою, функція повертає значення True. Наприклад, код IsDate (Range ("F3"))
поверне значення True, якщо в комірку F3 знаходиться дата.

Функція IsEmpty
 Функція IsEmpty вказує, чи була змінна-аргумент ініціалізований і чи містить виділена комірка якесь значення. Наприклад, код If IsEmpty (Range ("A1")) Then ... перевіряє, чи є щось в комірці А1 або ж вона порожня.


Функція IsNull

 Функція IsNull перевіряє, чи має змінна значення Null. Змінні з цим значенням не містять даних. Майте на увазі, що код If var = Null Then
завжди буде повертати значення False, так як більшість виразів, що містять значення Null, автоматично повертають у якості результату False. Якщо змінна var має значення Null, правильніше буде написати: If IsNull (var) Then

Функція IsNumeric

 Функція IsNumeric вказує, чи є аргумент числом. Наприклад, якщо комірка А1 містить дані 123 (навіть якщо вони відформатовані як текст), то умова: If IsNumeric (Range ("A1")) Then
буде виконано. З іншого боку, якщо в комірці міститься текст 123 Main Street, буде повернуто значення False.


Функція Immediate If

 Опис функції Immediate If має наступний синтаксис IIf (Expression, TruePart, FalsePart)
Якщо параметр Expression має значення True, буде повернуто значення TruePart. В іншому випадку функція поверне значення FalsePart. Наприклад, наступний код призводить до появи інформаційного вікна, у якому вказується на те, чи є порожній перша комірка активного аркуша.
Dim rng As Range
Set rng = ActiveSheet.Rows (1)
MsgBox IIf (IsEmpty (ActiveSheet.Cells (1, 1)), "Комірка порожня", "Комірка не порожня")
Слід розуміти, що функція Immediate If завжди оцінює обидва аргументи - TruePart і FalsePart - хоча і повертає тільки один з них. При цьому можна зіткнутися з побічним ефектом. Наприклад, розглянемо код
х = 0
у = IIf (x = 0, х ^ 2, 1 / х)
Він поверне помилку «поділ на нуль», незважаючи на те, що функція повертає результат 1 / х тільки в тому випадку, коли х не дорівнює нулю. Але функція оцінює цей вираз в обох випадках, в тому числі і коли х = 0.

Функція Switch

 Синтаксис функції Switch виглядає наступним чином: Switch (expr1, value1, Expr2, Value2, ... exprN. ValueN)
де exprN і valueN - вирази. Для роботи функції потрібно всього одна пара «вираз-значення», але дія функції буде більш наочним, якщо є принаймні дві такі пари.
Якщо вираз exprn має значення True, функція Switch поверне відповідне значення valuen. Як і у випадку з функцією IIf, відбувається оцінка всіх виразів. Якщо жодне з них не має значення True, функція повертає значення Null. Для перевірки в цьому випадку використовується функція IsNull
У лістингу 7.1 по розширенню файлу визначається його тип: Template, Workbook або Add-in.

Лістинг 7.1. Функція Switch
Sub ShowFilеТуре (FileExt As String)
Dim FileType As Variant
    FileType = Switch(FileExt = "xlt", "Template", FileExt = "xls", "Workbook", FileExt = "xla", "Addin")
    'Показ результату
    If Not IsNull(FileType) Then
        MsgBox FileType
    Else
        MsgBox "Неопізнаний тип"
    End If
End Sub

Цей код містить один нюанс. Так як функція Switch може повернути значення Null, ми не можемо використовувати для значення, що повертається тип String, що, на перший погляд, виглядає цілком природно: Dim FileType As String
FileType = Switch(FileExt = "xlt", "Template", FileExt = "xls", "Workbook", FileExt = "xla", "Addin")
Цей варіант коду цілком має право на життя, якщо змінна FileType має значення xlt, xls або xla. В іншому випадку буде отримано повідомлення про помилку Invalid use of Null. Саме тому в описі змінна FileType відноситься до типу Variant, що дає можливість привласнювати їй різні типи даних, у тому числі і ключове слово Null. Втім, проблеми можна уникнути за допомогою оператора Select Case, про який ми поговоримо в наступному розділі.
Перетворення одиниць вимірювання
 Функція InchesToPoints перетворить кількість дюймів у кількість точок. В Excel часто доводиться вводити значення в точках, в той час як більшість користувачів звикло до величин в дюймах. В одному дюймі міститься 72 точки.
Ця функція особливо корисна при роботі з властивостями положення, наприклад Тор або Left. Так, властивість Тор об'єкта Chart визначає положення верхньої частини діаграми. Це положення відміряється в точках, починаючи з першого ряду аркуша.
Відповідно, щоб зробити його значення рівним 0,25 дюйма, потрібно написати:
ActiveChart.ChartObject.Top= InchesToPoints(25)
Існує також зворотна функція PointsToInches, без якої не обійтися, якщо функція повертає значення в точках, а не в дюймах.
Оператор Beep
 Оператор Beep подає сигнал через внутрішній динамік комп'ютера. Він корисний, якщо потрібно привернути увагу користувача. Однак результат залежить від апаратного забезпечення вашого комп'ютера, і в деяких випадках застосування даного оператора не дасть ніякого результату. Тому бажано попереджати користувачів про його наявність в коді програми. У загальному випадку для цього найкраще використовувати рядок стану Excel, що робиться за допомогою властивості StatusBar об'єкта Application.

Список використаних джерел 










1. Использование макросов в Excel. 2-е изд. / С. Роман. — СПб.: Питер, 2004. — 507 е.: ил.

Немає коментарів:

Дописати коментар