Дистанційне Навчання ДДАУ
  Синтаксис та програмні конструкції VBA
 

Синтаксис та програмні конструкції VBA

Основи синтаксису

Синтаксис - (грец. складання) розділ граматики, що вивчає поєднання слів у речення. Синтаксис мови VBA - тема, яка багатьом здається нудною, але ставитися до неї слід так само, як до вивчення абетки і таблиці множення: у самій абетці або таблиці множення нічого цікавого немає, але без їх знання не прочитати цікаві книги або зробити важливі обчислення .

Основні синтаксичні принципи VBA:

1. VBA нечутливий до регістру;

2. щоб закоментувати код до кінця рядка, використовується одинарна лапка ( ') або команда REM;

3. символьні значення повинні братися у подвійні лапки ("");

4. максимальна довжина будь-якого імені у VBA (змінні, константи, процедури) - 255 символів;

5. початок нового оператора – це перехід на новий рядок

6. обмежень на максимальну довжину рядка немає (хоча у редакторі в рядку міститься лише 308 символів). В одному фізичному рядку оператори розділяються двокрапками:

MsgBox "Перевірка 1": MsgBox "Перевірка 2"

7. для зручності читання можна об'єднати декілька фізичних рядків в один логічний за допомогою пробілу і знаку підкреслення після нього:

MsgBox "Повідомлення користувачу" _

& VUserName

Оператори

Оператор - це найменша одиниця коду VBA, яка здатна виконуватися. Оператор може оголошувати або визначати змінну, встановлювати параметр компілятора VBA або виконувати яку-небудь дію в програмі.

Арифметичних операторів у VBA всього 7. Чотири стандартних: додавання (+), віднімання (-), множення (*), ділення (/), і ще три:

1. піднесення до степеня (^). Наприклад, 2 ^ 3 = 8;

2. цілочисельні поділ (). Ділить перше число на друге, відкидаючи (не округлюючи) дробову частину. Наприклад, 5 2 = 2;

3. ділення по модулю (Mod). Ділить перше число на друге, повертаючи тільки залишок від ділення. Наприклад, 5 Mod 2 = 1.

Оператор присвоювання в VBA - це знак рівності. Можна записувати так: Let nVar = 10, а можна ще простіше:

nVar = 10. Тут не плутайте знак рівності з оператором рівності. Останній вираз означає "присвоїти змінній nVar значення 10", а якщо рядок виглядає так: If (nVar = 10), то це значить "якщо значення змінної nVar дорівнює 10".

Операторів порівняння у VBA усього 8:

• рівність (=). Наприклад, If (nVar = 10);

• більше, ніж (>) і менше, ніж (<). Наприклад, If (nVar> 10);

• більше або дорівнює (> =) і менше або дорівнює (<=). Наприклад, If (nVar> = 10);

• не дорівнює (<>). Наприклад, If (nVar <> 10);

• порівняння об'єктів (Is). Визначає, посилаються об'єктні змінні на один і той самий об'єкт або на різні. Наприклад, If (objl is obj2);

• подібність (Like). Порівнює рядковий об'єкт із шаблоном і визначає, чи підходить шаблон. Оператори порівняння завжди повертають True (якщо затвердження істинно) або False (якщо твердження хибне).

Особливості порівняння символьних значень:

- при порівнянні символьних значень враховується регістр;

- пробіли у символьних значеннях також враховуються;

- при порівнянні текстових рядків на більше/менше за замовчуванням порівнюються просто двійкові коди символів - які більше або менше. Якщо потрібно використовувати той порядок, який йде в алфавіті, то потрібно скористатися командою Option Compare Text

Загальний синтаксис оператора Like виглядає так: Вираз1 Like Вираз2

При цьому Вираз1 - це будь-який текстовий вираз VBA, а Вираз2 - шаблон, який передається оператору Like. У цьому шаблоні можна використовувати спеціальні символів узагальнення (табл.1).

Логічні оператори використовуються при перевірці умов:

1. And - логічне І. повинні бути істинними обидві умови;

2. Or - логічне АБО. Повинна бути істинною хоча б одна з умов;

3. Not - логічне заперечення. Повертає True, якщо умова помилкова;

4. Xог - логічне виключення. У виразі E1 xor E2 повертає True, якщо тільки E1 = True або тільки Е2 = True, інакше - False;

5. Eqv - еквівалентність двох виразів, повертає True, якщо вони мають однакове значення;

6. Imp - імплікація, E1 imp E2 повертає False, якщо E1 = True і Е2 = False, інакше - True.

 

Табл.1. Підстановочні символи для оператора like

Підстановочний символ

Значення

#

Будь-яка одна цифра от 0 до 9

*

Будь-яка кіькість будь-яких символів (включаючи нульову)

?

Будь-який один символ

[а, Ь, с]

Будь-який один символ із приведеного у квадратних дужках списку

[ !а, Ь, с]

Будь-який один символ, окрім приведених у списку

 

Оператори конкатенаціі (тобто злиття символьних значень) використовуються майже у будь-якій програмі. У VBA їх два - (+) або (&). Рекомендується використовувати оператор (&), тому що:

- при використанні (&) виробляється автоматичне перетворення числових значень у рядкові - немає небезпеки допустити помилку:

- при використанні оператора (+) додавання символьного значення до значення типу Null дає Null.

Приклад використання оператора (&): MsgBox "Повідомлення користувачеві" & vUserName

Пріоритет операторів (першість виконання):

1. арифметичні оператори,

2. оператори конкатенаціі,

3. оператори порівняння,

4. логічні оператори.

Якщо у виразі є кілька операторів одного типу, то вони застосовуються у звичайному порядку - зліва направо. При необхідності можна змінювати порядок застосування операторів за допомогою круглих дужок.

Змінні і типи даних

Змінні - це контейнери для зберігання змінюваних даних. Для простоти змінну можна порівняти з номерком у гардеробі - ви здаєте у гардероб якісь дані, у відповідь вам видається номерок. Коли вам знову потрібні ці дані, ви "пред'являєте номерок" і отримуєте їх. Приклад роботи зі змінними у VBA може виглядати так:

Dim nMyAge As Integer

nMyAge = nMyAge +10

MsgBox nMyAge

Перед роботою зі змінною настійно рекомендується її оголосити. Оголошення змінної у нашому прикладі виглядає так:

Dim nMyAge As Integer.

Розшифруємо цей рядок.

Dim - це область видимості змінної. У VBA передбачено 4 ключових слова для визначення області видимості змінних.

1. Dim - використовується у більшості випадків. Якщо змінна оголошена як Dim в області оголошень модуля, то вона буде доступна в усьому модулі, якщо у процедурі - тільки на час роботи цієї процедури. Якщо немає ніяких особливих вимог, то має сенс завжди вибирати область видимості Dim.

2. Private - при оголошенні змінних у стандартних модулях VBA означає те ж, що й Dim. Відмінності проявляються тільки при створенні своїх класів.

3. Public - така змінна буде доступна усім процедурам у всіх модулях даного проекту, якщо її оголосили в області оголошень модуля. Якщо її оголосили всередині процедури, вона буде вести себе як Dim.

4. Static - такі змінні можна використовувати тільки всередині процедури. Ці змінні видно тільки всередині процедури, в якій вони оголошені, зате вони зберігають своє значення між різними викликами цієї процедури. Зазвичай використовуються для накопичення будь-яких значень. Наприклад:

Static nVarl As Integer

nVarl = nVarl + 1

MsgBox nVarl

Друге слово в нашому оголошення - nMyAge - це ідентифікатор (унікальне ім'я) змінної. Правила вибору імен єдині для багатьох елементів (змінні, константи, функції, процедури, тощо). Ім'я:

1. повинно починатися з літери;

2. не повинно містити пропусків і символів пунктуації (виняток - символ підкреслення (_));

3. максимальна довжина - 255 символів;

4. повинне бути унікальним у поточній області видимості;

5.зарезервовані слова (підсвічуються синім кольором у вікні редактора коду і такі, як Y1, SIN, TAN, тощо) використовувати не можна.

При створенні програм VBA настійно рекомендується виконувати угоду про іменування - правила, за якими присвоюються імена об'єктів. Найчастіше використовується:

1.Ім'я змінної має починатися з префіксу, записаного малими літерами. Префікс указує, що саме буде зберігатися у цій змінній:

·   str (или s) – string, символьне значення;

·   fn (или f) – функція;

·   sub – процедура;

·  с (або усі букви імені заглавні) – константа;

·   b – Boolean, логічне значення (True або False);

·   d – дата;

·   obj (или о) – посилання на об'єкт;

·   n – числове значення;

2.Імена функцій, методів і кожна змістовна частина у складеному слові має починатися із заглавної букви:

MsgBox objMyDocument.Name

Sub CheckDateSub( )

Третя частина нашого оголошення (AS integer) - це указівка на тип даних змінної. Тип даних визначає, дані якого виду можна буде зберігати у цій змінній. У VBA передбачені такі типи даних:

1. Числові:

Byte - ціле число від 0 до 255;

Integer - ціле число від -32 768 до 32 767;

Long - велике ціле число від -2 147 483 648 до 2 147 483 647;

Currency-велику десяткове число з 19 позиціями, включаючи 4 позиції після коми;

Decimal - ще більше десяткове число з 29 позиціями (після коми можна використовувати від 0 до 28 позицій);

Single і Double - значення з плаваючою комою (Double займає в 2 рази більше пам'яті, при цьому майже удвічі вище точність і у 10 ± 200 діапазон);

Увага: Спроба оголосити змінну із типом Decimal (наприклад, Dim n As Decimal) приведе до - Синтаксична помилка. Щоб отримати можливість працювати із типом Decimal, змінну потрібно спочатку оголосити як Variant або взагалі оголосити без типу (Dim n), оскільки тип даних Variant VBA використовується за умовчанням. Якщо ми призначимо змінній типу Variant числове значення, для якого підходить тільки Decimal, VBA автоматично призначить їй цей тип даних. Крім того, можна явно указати підтип Decimal для змінної типу variant за допомогою функції CDec().

2. Символьні (рядковіString): змінної довжини (приблизно до 2 млрд символів), фіксованої довжини (приблизно до 65 400 символів));

3. Дата і час (Date - від 01.01.100 до 31.12.9999);

4. Логічний (Boolean - може зберігати лише значення True та False);

5. Об'єктний (Object - зберігає посилання на будь-який об'єкт в пам'яті);

6. variant - спеціальний тип даних, який може зберігати будь-які типи даних.

Можна також використовувати користувацькі типи даних, але їх спочатку потрібно визначити за допомогою виразу type. Зазвичай користувацькі типи даних використовуються як додатковий засіб перевірки уведення користувачем значень (приклад - поштовий індекс).

Наведемо деякі моменти, пов'язані з вибором типів даних для змінних:

• загальний принцип - обирайте найменший тип даних, який може вмістити обрані вами значення. Якщо є якісь сумніви - вибирайте більший тип щоб уникнути виникнення помилок;

• якщо є можливість, краще не використовувати типи даних із плаваючою комою (Single і Double). Робота з ними відбувається повільніше, крім того, можуть бути проблеми при порівнянні за рахунок округлення;

При оголошенні змінної можна не указувати її тип. Наприклад, наше оголошення може виглядати так:

Dim nVarl

У цьому випадку змінна автоматично буде оголошена із типом variant. В принципі, у VBA можна працювати й без оголошення змінних. Наприклад, такий код

nVarl = nVarl + 1

MsgBox nVarl

буде цілком працездатним. Якщо ми використовуємо змінну в програмі без її оголошення, то автоматично буде створена нова змінна типу variant.

Однак оголошувати змінні потрібно обов'язково! І при цьому бажано явно указувати потрібний тип даних. Тому що:

1. скорочується кількість помилок: програма із самого початку відмовиться приймати у змінну значення неправильного типу (наприклад, рядкові замість числового);

2. при роботі з об'єктами підказка за властивостями і методами діє тільки тоді, коли ми спочатку оголосили об'єктну змінну з потрібним типом. Наприклад, в Excel два варіанти коду будуть працювати однаково:

• перший варіант:

Dim oWbk As Workbook

Set oWbk = Workbooks.Add

• другий варіант:

Set oWbk = Workbooks.Add

Але підказка за властивостями і методами об'єкта oWbk буде працювати тільки в першому випадку.

Усі досвідчені розробники взагалі забороняють використовувати змінні без явного їх оголошення. Для цього можна скористатися спеціальною командою компілятора (вона міститься тільки у розділ оголошень модуля): Option Explicit, а можна вставляти цю команду в усі модулі при їх створенні автоматично, встановивши у вікні Options прапорець Require Variable Declarations (меню Tools | Options, вкладка Editor) . Проілюструвати, навіщо вони це роблять, можна на простому прикладі:

Dim n

n = n + 1: MsgBox п

З першого погляду код не повинен викликати жодних проблем і має просто виводити у вікні повідомлення одиницю. Насправді він виведе пусте вікно повідомлення. Причина захована підступно: в третьому рядку п - це зовсім не англійська буква N, а російська П. На вигляд у вікні редактора коду відрізнити їх дуже складно. У той же час компілятор VBA, зустрівши такий код, просто створить нову змінну з типом даних VARIANT, у якій буде пусте значення. На виявлення такої помилки може знадобитися певний час. У той же час при встановленому Option Explicit проблема визначається миттєво. Можна оголосити кілька змінних в одному рядку, наприклад, так:

Dim nVarl As Integer, s1_ As String

Присвоєння значень змінним виглядає так:

nVarl = 30

Якщо потрібно збільшити вже існуюче значення змінної, то команда може виглядати так:

nVarl = nVarl + 1

В обох прикладах знак рівності означає не "дорівнює", а "присвоїти". При присвоєнні значень змінним потрібно пам'ятати про наступне:

1. рядкові значення завжди укладаються в подвійні лапки:

sVarl = "Hello"

2. значення дата / час укладається в символи "решітка" (#):

dVarl = # 05/06/2004 #

Зверніть увагу, що при присвоєнні значення дати/часу таким "явним" способом нам доводиться використовувати прийняті у США стандарти: 05 в даному випадку - це місяць, 06 - день. А відображення цього значення (наприклад, у вікні повідомлення) буде залежати від регіональних налаштувань на комп'ютері користувача;

3. якщо потрібно передати шістнадцяткове значення, то перед ним ставляться символи (&H):

nVarl = &HFFOO

4. Для передачі восьмерічного значення потрібно використовувати набір символів (&O).

У змінних до присвоєння їм значень користувачем міститься:

1. у змінних усіх числових типів даних - 0;

2. у символьних змінних змінної довжини - "" (рядок нульової довжини);

3. у символьних змінних фіксованої довжини - рядок заданої довжини із символами ASCII 0 (ці символи на екран не виводяться);

4. у Variant - спеціальне порожнє значення Empty. Провести перевірку на це значення (тобто чи було присвоєно значення змінної чи ні) можна за допомогою функції IsEmpty();

5. в Object - нічого (немає посилання на жоден з об'єктів).

 

 

 

Завдання для самостійної роботи.

Завдання 1

1. Створіть новий документ Word (Табл.1) і збережіть його як, наприклад, D: СередБал.doc. Уведіть у комірки С2, D2 і E2 цієї таблиці оцінки.

Табл.1

Результати зимової екзаменаційної сесії 2007-2008 навчального року

№ п/п

Прізвище І.Б.

Інформатика

Вища математика

Політологія

Середній бал

25.

Кулина Ю.В.

5

4

5

 

 

2. Відкрийте редактор Visual Basic у Word і створіть у своєму проекті новий стандартний модуль.

3. Уведіть у створеному Вами стандартному модулі наступний код:

Public Sub СередняОцінкаToWord()

With Selection.Tables(1)

Selection.InsertFormula Formula:="= (c3+d3+e3)/3", NumberFormat:="0,00"

End sub

4. Відлагодьте код (програму): Debug►Compile.

5. У вікні Word сфокусуйтеся на комірці F3. Виконайте макрос (Alt+F8, тощо) СередняОцінкаToWord і оцініть отримане значення „Середній бал”.

 

Завдання 2

1. Створіть нову книгу Excel, збережіть її, наприклад, D:LabVariablesOperators.xls. Уведіть у комірки Al, A2 і A3 цієї книги будь-які значення.

2. Відкрийте редактор Visual Basic і створіть у своєму проекті новий стандартний модуль.

3. За допомогою меню ToolsReferences додайте у ваш проект посилання на бібліотеку Microsoft Word (10.0/11.0/12.0) Object Library (Рис.1):

 

Рис.1. Вставка посилання на бібліотеку Microsoft Word 12.0 Object Library

4. Уведіть у створеному вами стандартному модулі наступний код:

Public Sub FromExcelToWord()

MsgBox Range("A1").Text

MsgBox Range("A2").Text

MsgBox Range("A3").Text

Dim oWord As Word.Application

Dim oDoc As Word.Document

Set oWord = CreateObject("Word.Application")

oWord.Visible = True

Set oDoc = oWord.Documents.Add()

oDoc.Activate

oWord.Selection.TypeText "Вставляється текст"

End Sub

Цей код виводить у вікна повідомлень значення комірок Al, A2 і A3, а потім відкриває Word і вдрукувує у початок нового документу рядок "Вставляється текст".

Рис.2. Вікно макросу книги LabVariablesOperators.xls

5. Виконайте макрос і переконайтеся, що код працює без помилок.

 

Завдання 3

Змініть код цієї процедури таким чином, щоб замість рядка "Вставляється текст" виводилися значення комірок Al, A2 і A3 разом (через пробіл).

 

Відповідь до завдання. Підсумковий код може виглядати так:

Public Sub FromExcelToWordAnswer()

Dim sA1, sA2, sA3, sText As String

Dim oWord As Word.Application

Dim oDoc As Word.Document

sA1 = Range("A1").Text

sA2 = Range("A2").Text

sA3 = Range("A3").Text

sText = sA1 + " " + sA2 + " " + sA3

Set oWord = CreateObject("Word.Application")

oWord.Visible = True

Set oDoc = oWord.Documents.Add()

oDoc.Activate

oWord.Selection.TypeText sText

End Sub

Константи

Константи – це теж контейнери для зберігання даних, але, на відміну від змінних, вони не змінюються у ході виконання VBA-програми. З костантами код стає читабельним, прибираються потенційні помилки. Константи використовують щоб змінити будь-яке значення у коді (наприклад, рівень податку), це потрібно зробити усього один раз - в оголошенні константи.

Константи визначаються за допомогою ключового слова Const:

Const COMP_NAME As String = "Microsoft"

Головна відмінність констант від змінних полягає у тому, що при спробі змінити значення константи в тілі процедури буде видане повідомлення про помилку!

Константи дуже зручні при роботі з групами іменованих елементів (дні тижня, місяці, кольори, клавіші, типи вікон, тощо). Вони дозволяють використовувати у коді програми позначення, які легко читаються, замість числових кодів, що важко запам'ятовуються. Наприклад, рядки:

UserForml.BackColor = vbGreen  і

UserForml.BackColor = 65280

функціонально однакові, але в чому сенс першого рядка, здогадатися набагато легше.

У VBA вбудовано безліч службових констант: календарних, для роботи з файлами, кольорами, формами, типами дисків, тощо. Переглянути їх можна через довідкову систему VBA: Microsoft Visual Basic Documentation | Visual Basic Language Reference | Constants. Безліч наборів констант вбудовано в об'єктні моделі додатків Office.

Про одну з констант (вона знаходиться в розділі Miscellaneous Constants) варто сказати окремо: константа vbCrLf дозволяє здійснити перехід на новий рядок, наприклад:

MsgBox "Перший рядок" + vbCrLf + "Другий рядок"

Оператори умовного та безумовного переходу

Оператори умовного переходу - одні з найважливіших і часто використовуваних елементів у мовах програмування. Загальний принцип їх роботи простий: перевіряється відповідність якимось умовам (істинність або хибність будь-яких виразів) і у залежності від цього виконання програми направляється по одній чи іншій гілці. У VBA передбачено два оператори умовного переходу: If ... Then і Select Case.

Оператор If ... Then - найпопулярніший у программистов. Повний його синтаксис виглядає так (необов'язкові частини укладені у квадратні дужки):

If Умова Then

Команди1

[ElseIf УмоваN Then

КомандиN]

[Else

Команди2]

End If

При цьому:

Умова - вираз, що перевіряється на істинність. Якщо умова правдива, то виконуються команди1, якщо хибна - команди2;

УмоваN - додаткові умови, які також можна перевірити. У випадку, якщо вони виконуються (вираз УмоваN - істинний), то виконуються КомандиN. Додаткові умови (разом з конструкцією ElseIf) можна повторювати необмежену кількість раз, але якщо вам потрібно реалізувати перевірку на відповідність великій кількості умов, то вірніше буде використовувати конструкцію Select Case.

Оператор If ... Then застосовується:

1. коли треба перевірити одну умову і у разі відповідності зробити якусь дію:

If nTemperature <10 Then

MsgBox "Одягти куртку"

End If

2. коли потрібно зробити те саме, що і у попередньому прикладі, а у разі невідповідності виконати іншу дію:

If nTemperature <10 Then

MsgBox "Одягти куртку"

Else

MsgBox "Одягти вітровку"

End If

3. коли потрібно перевірити на відповідність кілька умов (зверніть увагу на використання логічних операторів):

If (nTemperature <10) And (Brain = True) Then

MsgBox "Одягти куртку і взяти парасольку"

End If

4. у випадку, коли перевірка першої умови повернула False, потрібно перевірити на відповідність ще декілька умов (зручно використовувати ElseIf):

If (blGoInCar = True) Then

MsgBox "зодягнемось для машини"

ElseIf nTemperature <10 Then

MsgBox "Одягти куртку"

Else

MsgBox "Можна йти в сорочці"

End If

У цьому прикладі, оскільки blGoInCar - змінна типу Boolean і сама по собі приймає значення True або False, перший рядок може виглядати так:

If blGoInCar Then .. .

Зауваження щодо використання If ... Then:

1. ключове слово Then повинне знаходитися в одному рядку з If і умовою, Якщо перенести його на наступний рядок, буде видане повідомлення про помилку;

2. якщо розмістити команду, яку потрібно виконати при істинності умови, на одному рядку з If і Then, то End If можна не писати:

If nTemperature <10 Then MsgBox "Одягти куртку"

3. Якщо ж використовується кілька команд або конструкції Else / ElseIf, то End If наприкінці потрібно писати обов'язково, інакше виникне синтаксична помилка;

4. для виразу If ... Then настійно рекомендується використовувати відступи для виділення блоків команд. Інакше читати код буде важко;

5. оператори If ... Then можна укладати один в одного:

If MyVar = 5 Then

MsgBox "MyVar = 5"

If MyVar = 10 Then

MsgBox "MyVar = 10"

End If

End If

Оператор Select Case ідеально підходить для перевірки одного й того ж значення, яке потрібно багато разів порівняти з різними виразами, його синтаксис:

Select Case Вираз

Case Умова1

Команди1

[Case УмоваN

КомандиN]

[Case Else

Команди2]

End Select

Наприклад:

Select Case sDayOfWeek

Case "Понеділок"

MsgBox "Салат зі шпинату"

Case "Вівторок"

MsgBox "Салат з морської капусти"

Case Else

MsgBox "На цей день у нас нічого не передбачено"

End Select

Зауваження з приводу Select Case:

1. рядок:

Сазе "Понеділок"

насправді означає:

Case sDayOfWeek = "Понеділок"

Таке рівняння мається на увазі за умовчанням. Але ви можете використати й інший оператор порівняння або цілий набір операторів, наприклад

Case 0 То 5, 15, Is> 55

Такий вираз можна перекласти як "Якщо вираз, що перевіряється, потрапляє у діапазон від 0 до 5 включно, або дорівнює 15, або більше 55". Слово Is при цьому можна пропустити - компілятор VBA додасть це ключове слово за вас. Кілька критеріїв у Case перераховуються через коми і об'єднуються так, як працює оператор OR, тобто виконання піде з цієї гілки, якщо тестоване значення буде відповідати хоча б одному з критеріїв;

2. при використанні діапазону (0 To 5) включаються і межі діапазону (в даному випадку 0 і 5).

 

Оператор Goto

Оператор Goto - це оператор безумовного переходу, коли хід виконання програми без перевірки будь-яких умов перескакує на позначку в коді. Приклад використання Goto:

GoTo EngineNotStarted

  ...

EngineNotStarted:

MsgBox "Їдемо на метро"

  ...

Тут EngineNotStarted: - це позначка, для неї використовується ім'я (вибирати за правилами призначення імен для змінних), що закінчується двокрапкою. Ця позначка може знаходитися як до, так і після оператора Goto. У будь-якому випадку, при виконанні оператора Goto хід виконання "перейде" на зазначену в Goto позначку.

Іноді використання Goto дуже зручно, наприклад, коли потрібно вимагати від користувача уведення правильного значення невідоме число разів. Однак використовувати Goto категорично не рекомендується, тому що код стає важкочитаємим.

Найчастіше Goto можна замінити конструкцією Do while ... Loop) або викликом функції з самої себе.

 

Завдання для самостійної роботи.

Завдання 1

1. Створіть нову книгу Excel і збережіть її як D:LabCondConstructions.xls.

2. Відкрийте редактор Visual Basic в Excel і створіть у цій книзі новий стандартний модуль.

3. Уведіть у цьому модулі наступний код:

Option Explicit

Public Sub IfThenSub()

Dim nResult As Integer

nResult = MsgBox("Натисніть кнопку", vbYesNo, "Вікно повідомлення")

ThisWorkbook.Worksheets(1).Range("a1").Value = "Ви натиснули кнопку: " & nResult

ThisWorkbook.Worksheets(1).Range("a1").Columns.AutoFit

End Sub

 

Рис.3. Вікно повідомлення макросів:

Sub IfThenSub() і Sub IfThenSubAnswer()

 

 

 

4. Запустіть цей код на виконання і переконайтеся, що він виконується без помилок.

Цей код повинен вставляти в комірку А1 першого листа книги текстове значення: "Ви натиснули кнопку: 6", якщо була натиснута кнопка "Да" у вікні повідомлення, (7 - якщо була натиснута кнопка "Нет").

Примітка. Отримати інформацію, які значення при натисканні кнопки який повертаються з вікна повідомлення, можна за допомогою довідки по функції MsgBox().

 

Завдання А:

1. Створіть новий документ Word і збережіть його як D:LabWordCondConstructions.doc.

2. Відкрийте редактор Visual Basic у Word і створіть у цьому документі новий стандартний модуль.

3. Уведіть у цьому модулі такий код, щоб замість чисел у документ вписувалися рядкові значення натиснутої кнопки (наприклад, ”Ви натиснули кнопку: Да” або ”Ви натиснули кнопку: Нет”). Використовуйте при цьому синтаксичну конструкцію If ... Then ... Else.

Відповідь до завдання А – код може бути таким:

Public Sub IfThenSubAnswer()

Dim nResult As Integer, sResult, aName As String, aDoc, oWord, oDoc As Object

nResult = MsgBox("Натисніть кнопку", vbYesNo, "Вікно повідомлення")

If nResult = vbYes Then

   sResult = "Да"

ElseIf nResult = vbNo Then

   sResult = "Нет"

Else

   sResult = "Невідома кнопка"

End If

Selection.TypeText "Ви натиснули кнопку: " & sResult & vbCr

End Sub

Завдання Б: Замініть у вашій процедурі рядок:

nResult = MsgBox("Натисніть кнопку", vbYesNo, "Вікно повідомлення")

на:

nResult = MsgBox("Натисніть кнопку", vbAbortRetrylgnore, "Вікно повідомлення")

Змініть вашу процедуру таким чином, щоб вона вставляла у документ: "Ви натиснули кнопку:  "Прервать", "Повтор" або "Пропустить", у залежності від того, яка кнопка у вікні повідомлення була натиснута. Використовуйте при цьому конструкцію Select Case.

Відповідь до завдання Б – код може бути таким:

Public Sub SelectCaseAnswer()

Dim nResult As Integer, sResult, aName As String, aDoc, oWord, oDoc As Object

nResult = MsgBox("Натисніть кнопку", vbAbortRetryIgnore, "Вікно повідомлення")

Select Case nResult

   Case vbAbort

      sResult = "Прервать"

   Case vbRetry

      sResult = "Повтор"

   Case vbIgnore

      sResult = "Пропустить"

   Case Else

      sResult = "Невідома кнопка"

End Select

Selection.TypeText "Ви натиснули кнопку: " & sResult & vbCr

End Sub

 

 

Рис.4. Вікно повідомлення макросу - Sub SelectCaseAnswer()

 

 

 

 

Робота з циклами

Цикли використовуються у ситуаціях, коли нам потрібно виконати яку-небудь дію кілька разів. Перша ситуація - ми можемо знати, скільки разів потрібно виконати певну дію, у цьому випадку використовується конструкція For ... Next:

For iCounter = 1 To 10

MsgBox "Лічильник:" & iCounter

Next

Щоб визначити, наскільки має приростати значення лічильника, використовується ключове слово Step:

For iCounter = 1 To 10 Step 2

MsgBox "Лічильник:" & iCounter

Next

Можна і зменшувати вихідне значення лічильника:

For iCounter = 10 To 1 Step -2

MsgBox "Лічильник:" & iCounter

Next

Для безумовного виходу з конструкції For ... Next використовується команда Exit For:

VStop = InputBox("Уведіть значення останова")

VInput = CInt (VStop)

For iCounter = 1 To 10

MsgBox "Лічильник:" & iCounter

If iCounter = VInput Then Exit For

Next

Дуже часто у VBA потрібно зробити яку-небудь дію з усіма елементами колекції або масиву - перебрати усі відкриті документи, усі листки Excel, усі ячейки у певному діапазоні, тощо. Для того, щоб пройти циклом по усіх елементах колекції, використовується команда For Each ... Next:

For Each oWbk in Workbooks

MsgBox oWbk.Name

Next

При використанні цього прийому можна дуже просто знайти і отримати посилання на потрібний об'єкт:

For Each oWbk in Workbooks

If oWbk.Name = "Сводка.xls" Then

Set oMyWorkBook = oWbk

Exit For

End If

Next

У цьому випадку ми проходимо циклом по усіх елементх колекції Workbook (тобто з відкритих робочих книг в Excel), для кожної книги перевіряємо її ім'я і, якщо знайшли книгу з ім'ям "Сводка.xls", отримуємо на неї посилання та виходимо з циклу. Колекція робочих книг - це спеціальна колекції яка уміє робити пошук у собі по імені елемента, тому, в принципі, можна було б обійтися таким рядком:

Set oMyWorkBook = Workbooks("Сводка.xls")

Але для багатьох інших колекцій без конструкції For Each .. . Next не обійтися.

Ще одна ситуація: коли ми не знаємо точно, скільки разів повинна бути вконана та чи інша команда - це залежить від якоїсь умови. У цьому випадку використовуються конструкції Do While. . . Loop і Do Until. . . Loop.

Конструкція Do While. . . Loop означає: виконувати будь-яку дію до тих пір, поки умова Істинна:

Do While MyVar <10

MyVar = MyVar + 1

MsgBox "MyVar =" & MyVar

Loop

Застосувань на практиці - безліч: пройти по всьому набору записів, поки вони не закінчаться, вимагати від користувача увести відповідне значення, поки він нарешті не уведе його, тощо.

Якщо ви випадково запустили в своїй програмі нескінченний цикл, натисніть на клавіші <Ctrl> + <Break>. Відкриється вікно, аналогічне представленому на рис.5, у якому ви зможете продовжити виконання (кнопка Continue), завершити його (End) або відкрити ваш код у відладчику (Debug).

 

 

Рис.5. Выполнение макроса остановлено по <Ctrl>+<Break>

 

Другий варіант – Do Until ... Loop. Усе виглядає так само, за єдиним виключенням: цикл будет виконуватися до тих пір, поки умова Хибна.

Do Until MyVar >= 10

MyVar = MyVar + 1

MsgBox "MyVar = " & MyVar

Loop

Можна переписати цикл так, щоб умова перевірялася після завершення циклу:

Do

MyVar = MyVar +1

WScript.Echo "MyVar = " & MyVar

Loop While MyVar < 10

У цьому випадку цикл буде виконано, щонайменш, один раз. Негайний вихід з циклу можна зробити по команді Exit Do

У VBA є також конструкція While .. . Wend. Це ще один варіант циклу, який залишений для забезпечення сумісності з першими версіями Visual Basic. Функціональні можливості - ті самі, що й у конструкції Do While ... Loop:

While MyVar < 10

MyVar = MyVar + 1

WScript.Echo "MyVar = " & MyVar

Wend

Масиви

Масиви використовуються для зберігання у пам'яті множини значень. Замість того щоб оголошувати безліч схожих змінних, часто набагато зручніше скористатися масивом. Оголошення масиву здійснюється дуже просто, наприклад:

Dim MyArray (2) As Integer

Тут 2 - це верхня межа масиву (upper bound). За замовчуванням нижній межі масиву (lower bound) відповідає елемент з номером 0. Кількість елементів, яку може зберігати масив, - від 0 до верхньої межі включно. Наш масив може зберігати три цілочисельних елементи.

Якщо треба, щоб нижня межа масиву (і, відповідно, нумерація елементів) починалася з 1, то в розділ оголошень модуля потрібно внести команду: Option Base 1

В принципі, тип даних для масиву можна не оголошувати: Dim MyArray (2). У цьому випадку для елементів масиву буде використаний тип VARIANT. Такий масив зможе зберігати в собі елементи різних типів даних, але вимоги до пам'яті у нього будуть вищі і працювати він буде повільніше порівняно з масивом, для якого тип даних указан явно (наприклад, Integer або String).

Присвоїти значення окремому елементу масиву (у нашому випадку - першому) можна дуже просто:

МуАггау (0) = 100

А потім це значення можна буде отримати: MsgBox МуАггау (0). Масиви можуть бути багатовимірними, зокрема, двовимірними: Dim MyArray (4, 9). У кожному рядку багатовимірного масиву зручно зберігати дані, що відносяться до одного об'єкту (наприклад, ім'я співробітника, унікальний номер, номер телефону). У VBScript в одному багатовимірному масиві може бути до 60 вимірювань.

Часто необхідно використовувати динамічні масиви, розмір яких можна змінювати в ході виконання. Динамічний масив оголошується таким чином:

Dim MyArray() 'оголошуємо масив без верхньої межі

ReDim MyArray (4) 'змінюємо розмір масиву

Команда ReDim не тільки змінює розмір масиву, але й видаляє з нього всі старі значення. Щоб старі значення збереглися, використовується ключове слово Preserve:

ReDim Preserve MyArray (7)

Однак, якщо новий розмір масиву менше, ніж кількість поміщених в нього елементів, слово Preserve не допоможе - частина даних все одно буде втрачена.

Масиви можна створювати та заповнювати одночасно:

Dim MyArray

MyArray = Array (100, 200, 300, 400, 500)

Вказувати розмір масиву необов'язково - він буде автоматично налаштований у відповідності з кількістю переданих елементів.

Очистити масив можна командою Erase:

Erase MyArray

Масив фіксованої довжини просто очищується, динамічний масив разініціалізується - його доведеться ініціалізувати (визначати розмір) заново.

У динамічних масивах часто не відомо, скільки елементів у масиві. Для визначення кількості елементів використовується функція UBound() (якщо масив одновимірний чи вас цікавить розмір першого вимірювання, то вимірювання передавати не треба):

UBound (імя_Массіва [, вимірювання))

Як не дивно, але при програмуванні у VBA вам рідко доведеться стикатися з масивами. Замість них в об'єктних моделях додатків Office зазвичай використовуються колекції.

Колекції - це спеціальні об'єкти, які призначені для зберігання наборів однакових елементів. Наприклад, у Word передбачена колекція Documents для зберігання елементів Document, тобто усіх відкритих документів, в Excel - колекції Workbooks (відкриті книги) і Worksheets (листи у книжці) і т. п. Колекції звичайно зручніші, ніж масиви: вони з самого початку безрозмірні і в них передбачено стандартний набір властивостей і методів (метод Add() для додавання нового елемента, властивість Count для отримання інформації про кількість елементів, метод Item() для отримання посилання на потрібний елемент). Для багатьох колекцій в об'єктних моделях крім стандартних передбачений ще й набір специфічних властивостей і методів.

 

Завдання для самостійної роботи.

Підготовка:

1. Створіть новий документ Word з ім'ям C:LabLoops.doc. Уведіть у цьому документі декілька речень з текстом.

2. Відкрийте редактор Visual Basic і створіть у цьому документі новий стандартний модуль.

Завдання А:

Створіть у цьому стандартному модулі процедуру ForNextSub(), яка виводила б послідовно 10 вікон повідомлень з цифрами від 1 від 10.

Відповідь до завдання, А:

Підсумковий код процедури може бути таким:

Public Sub ForNextSub()

Dim i As Integer

For i = 1 To 10

MsgBox i

Next

End Sub

або таким:

Public Sub ForNextSub2( )

Dim i As Integer

i = 1

Do While i <= 10

MsgBox i = i + 1

Loop

End Sub

Завдання Б:

Створіть у цьому програмному модулі процедуру ForEachSub(), яка б виводила у вікна повідомлень послідовно кожне слово у вашому документі LabLoops.doc. Колекцію (масив) всіх слів документа можна отримати за допомогою конструкції ThisDocument.Words. Значення кожного слова можна отримати за допомогою властивості Text елемента цієї колекції.

Відповідь до завдання Б:

Підсумковий код процедури ForEachSub() може бути таким:

Public Sub ForEachSub()

For Each oWord In ThisDocument.Words

MsgBox oWord.Text

Next

End Sub

Процедури і функції

Види процедур

Процедури - це найважливіші функціональні блоки мови VBA. У VBA ви можете виконати тільки той програмний код, який міститься у будь-якій процедурі (звичайної в стандартному модулі, подієвої для елемента керування на формі тощо). Іноді користувачі-початківці намагаються записати команди прямо в область оголошень стандартного модуля і не можуть зрозуміти, чому команди не виконуються (повідомлення про помилку при цьому не видається - просто цей код є "невидимим" для компілятора). Причина проста: у розділі оголошень модуля (коли у верхніх списках редактора коду показуються значення General та Declarations) можуть бути тільки оголошення змінних рівня модуля і деякі спеціальні інструкції для компілятора. Увесь інший програмний код повинен знаходитися усередині процедур.

У VBA передбачені такі типи процедур:

1. процедура типу Sub (підпрограма) - універсальна процедура для виконання будь-яких дій:

Sub Farewell()

MsgBox "Goodbye"

End Sub

Макрос у VBA - це процедура типу Sub, яка не має параметрів. Тільки макроси можна викликати по імені з редактора VBA або з програми Office. Усі інші процедури потрібно викликати або з інших процедур, або спеціальними способами;

2. процедура типу Function (функція) - набір команд, які мають бути виконані. Принципова відмінність тільки одна: функція повертає якесь значення у процедуру, яка її викликала. Приклад функції:

Function Tomorrow()

Tomorrow = DateAdd("D",1,Date())

End Function

і приклад її виклику:

Private Sub Test1()

Dim dDate

dDate = Tomorrow()

MsgBox dDate

End Sub

У тексті функції необхідно передбачити оператор, який надає їй будь-яке значення. У нашому випадку це рядок:

Tomorrow = DateAdd("D",1,Date())

В принципі, процедури типу Sub теж можуть повертати значення - за допомогою змінних, що передаються за посиланням. Навіщо ж тоді потрібні функції? Все дуже просто: функцію можна вставляти практично у будь-яке місце програмного коду. Наприклад, наш останній приклад може виглядати набагато простіше:

Private Sub Test1()

MsgBox Tomorrow()

End Sub

У VBA передбачені сотні вбудованих функцій (і набагато більшу кількість функцій передбачено в об'єктних моделях додатків Office). У нашому прикладі використовуються дві вбудовані функції: Date(), яка повертає поточну дату по годиннику комп'ютера, і DateAdd(), яка уміє додавати до поточної датою певну кількість днів, тижнів, місяців, років і т. п.

У VBA є також процедури обробки подій (event procedure) - процедури типу Sub спеціального призначення, що виконуються у разі виникнення певної події, наприклад, при відкритті форми або натисканні на ній кнопки.

Є ще процедури типу Property (процедури властивості). Вони потрібні для визначення властивостей створюваного класу.

Область видимості процедур

За замовчуванням усі процедури VBA (за винятком процедур обробки подій) визначаються як відкриті - Public. Це значить, що їх можна викликати з будь-якої частини програми - з того самого модуля, з іншого модуля, з іншого проекту. Оголосити процедуру як Public можна так:

Public Sub Farewell()

або, оскільки процедура визначається як Public за замовчуванням, то можна й так:

Sub Farewell()

Можна оголосити процедуру локальною:

Private Sub Farewell()

У цьому випадку цю процедуру можна буде викликати тільки з того модуля, в якому вона розташована. Таке рішення іноді може запобігти помилкам, пов'язаним з викликом процедур, не призначених для цього, з інших модулів.

Можна обмежити область видимості відкритих процедур (тих, які у вас визначені як Public) у якомусь модулі рамками одного проекту. Для цього досить у розділі оголошень цього модуля вписати рядок

Option Private Module

Якщо при оголошенні процедури використовувати ключове слово Static, то усі змінні в цій процедурі автоматично стануть статичні і будуть зберігати свої значення і після завершення роботи процедури. Наприклад:

Private Static Sub Farewell()

Оголошення процедур

Оголосити процедуру можна вручну, наприклад, додавши у код рядок:

Private Sub Farewell()

При цьому редактор коду автоматично додасть рядок End sub і лінію-розділювач. А можна оголосити процедуру, скориставшись меню Insert ► Procedure.

Передача параметрів

Параметри - це значення, які передаються від однієї процедури до іншої. У принципі, можна обійтися і без параметрів, скориставшись лише змінними рівня модуля, але при використанні параметрів читаємість програми поліпшується. Щоб процедура мала можливість приймати параметри, її спочатку потрібно оголосити з параметрами. Нижче наведено приклад простої функції, яка складає два числа і повертає результат:

Function fSum(nIteml As Integer, nltem2 As Integer)

fSum = nIteml + nItem2

End Function

Її виклик може виглядати так:

MsgBox fSum(3,2)

В даному випадку ми оголосили обидва параметри як обов'язкові, і тому спроба викликати функцію без передачі їй будь-якого параметра (наприклад, fsum(3)) призведе до помилки "Argument not optional" - "Параметр не є необов'язковим". Щоб можна було пропускати якісь параметри, їх потрібно зробити необов'язковими. Для цієї мети використовується ключове слово Optional:

Function fSum(nIteml As Integer, Optional nItem2 As Integer)

У довідці з вбудованим функцій VBA необов'язкові параметри укладають у квадратні дужки.

Для перевірки того, чи був переданий необов'язковий параметр, використовується або функція isMissing (якщо для цього параметра було використано тип Variant), або його значення порівнюється зі значеннями змінних за замовчуванням (нуль для числових даних, порожній рядок для строкових тощо). Виклик функції з передачею параметрів може виглядати так:

nResult = fSum(3,2)

Однак тут є кілька моментів, які необхідно розглянути. У нашому прикладі ми передаємо параметри по позиції, тобто значення 3 присвоюється першому параметру (nIteml), а значення 2 - другому (nItem2). Однак параметри можна передавати і по імені: nResult = fSum(nIteml:=3,nItem2:=2)

Зверніть увагу, що, незважаючи на те, що тут виконується цілком звична операція - привласнення значень, оператор присвоювання використовується не зовсім звичайний - двокрапка зі знаком рівності (:=), як у C++. При використанні знаку рівності виникне помилка.

Звичайно, замість явної передачі значень (fsum(3,2)) можна використовувати змінні. Однак що станеться зі змінними після того, як вони "побувають" у функції, якщо функція змінює їх значення? Залишаться ці значення за межами функції колишніми або зміняться?

Все залежить від того, як саме передаються параметри: за посиланням (за замовчуванням, а можна також використовувати ключове слово byRef) або за значенням (ключове слово byVal).

Якщо параметри передаються за посиланням, то фактично у процедуру, що викликається, передається посилання на цю змінну в оперативній пам'яті. Якщо цю змінну в процедурі, що викликається,  змінити, то зміниться значення і у функції, що викликає. Це прийнято у VBA за замовчуванням.

Якщо параметри передаються за значенням, то фактично в оперативній пам'яті створюється копія цієї змінної і у процедуру, що викликається, передається ця копія. Звичайно ж, щоб ви не зробили з копією, на початкову змінну це ніяк не вплине і на процедурі, що викликає, не відіб'ється.

Продемонструвати різницю можна на простому прикладі:

Public Sub TestProc() 'Оголошуємо змінну nParl і присвоюємо їй значення

Dim nParl As Integer

nParl = 5

MsgBox fSum(nIteml:=nParl, nItem2:=2) 'Передаємо її як параметр nIteml функції fSum

                                                                    'А тепер перевіряємо, що стало в нашій змінної nParl

                                                                    'після того, як вона побувала у функції fSum

MsgBox nParl

End Sub

 

Function fSum(nIteml As Integer, nItem2 As Integer) 'Використовуємо значення змінної

fSum = nIteml+nItem2                                                  'А потім її міняємо!

nIteml=10

End Function

Перевірте, що буде, якщо змінити рядок оголошення функції:

Function fSum (nIteml As Integer, nItem2 As Integer)

на:

Function fSum (byVal nIteml As Integer, nItem2 As Integer)

Можна продемонструвати компілятору VBA, що значення, що повертається функцією, нас зовсім не цікавить. Для цього достатньо не укладати її параметри в круглі дужки. Наприклад, для нашої функції це може виглядати так:

fSum 3, 2

Такий код буде працювати абсолютно нормально. Однак, якщо буде потрібно все-таки дізнатися, що повертає функція, то доведеться передані їй параметри укладати в круглі дужки: nResult = fSum(3,2). Для багатьох вбудованих функцій компілятор VBA у принципі не дає можливості ігнорувати значення, що повертається, змушуючи вміщувати параметри у круглі дужки і приймати значення, що повертається. В іншому випадку він повідомляє: „Синтаксична помилка”.

Виклик і завершення роботи процедур

З прикладами виклику процедур і функцій з коду ми вже стикалися. Для цього достатньо записати ім'я процедури або функції, передати їй необхідні параметри, а для функції ще й прийняти значення, що повертається. Одні процедури можна викликати з інших процедур. Але як дати користувачеві можливість запустити найпершу процедуру? У нашому розпорядженні наступні можливості:

1. створити макрос (тобто спеціальну процедуру, яка не має параметрів, в модулі NewMacros) і запустити його по імені, кнопці або комбінацією клавіш. Макрос потім може викликати й інші процедури;

2. створити форму і скористатися набором подій цієї форми і елементів керування на ній або просто елементом управління на аркуші Excel або документі Word;

3. призначити процедурі спеціальне ім'я (Autoexec(), AutoNew() тощо). Повний список таких спеціальних імен можна побачити в документації. Щоправда, оскільки раніше ці можливості активно використовувалися вірусами, в Office 2003 за умовчанням ці макроси запускатися не будуть. Для того, щоб забезпечити їм (і багатьом іншим макросам) можливість запуску, необхідно змінити встановлений рівень безпеки в меню Сервіс ► Макрос ► Безпека чи забезпечити цифрові підписи для ваших макросів;

4. замість спеціального імені для макросу використовувати подію: наприклад, подія запуску програми, подія відкриття документа тощо. Це рекомендований Microsoft спосіб забезпечення автоматичного запуску програмного коду.

5. можна запустити програму з командного рядка з параметром /m і ім'ям макросу, наприклад:

winword.exe /mМуМасгоs

Дуже зручно в цьому випадку використовувати ярлики, в яких можна указати цей параметр запуску.

У VBA допустима ситуація, коли функція запускає на виконання саму себе. Однак подібних викликів краще уникати (по можливості замінюючи їх на цикли). Причина - проблеми з читаємістю і можливе (у випадку нескінченного запуску) вичерпання оперативної пам'яті (переповнення стека), чревате серйозними системними помилками.

Для завершення виконання процедури у VBA передбачені конструкції End і Exit. Синтаксис їх дуже простий:

Exit Sub

End Sub

Роблять вони одне й те саме - завершують роботу поточної процедури. Однак використовуються у різних ситуаціях:

1. оператор End - це завершення роботи процедури після того, як все зроблено. Після оператора End код процедури закінчується;

2. оператор Exit - це негайне завершення роботи функції в ході її роботи. Зазвичай розміщується у блок оператора умовного переходу, щоб зробити вихід, як тільки з'ясувалося, що функції по якихось причинах далі виконуватися не потрібно (наприклад, далі йде код обробника помилок).

 

Завдання для самостійної роботи.

1. Створіть у модулі NewMacros шаблону Normal.dot нову функцію Multiply(), яка б:

• брала у якості вхідних параметрів два числа;

• перемножувала їх і повертала отримане значення.

2. Створіть у модулі NewMacros шаблону Normal.dot нову процедуру AutoNew() з наступним кодом:

Public Sub AutoNew()

Dim nMult1 As Integer

Dim nMult2 As Integer

Dim nResult As Integer

nMultl = CInt(InputBox ("Введіть перше число:"))

nMult2 = CInt(InputBox ("Введіть друге число:"))

nResult = 10

Selection.InsertAfter nResult

Selection.Collapse wdCollapseEnd

End Sub

3. Змініть процедуру AutoNew() таким чином, щоб вона передавала значення змінних nMult1 і nMult2 функції fMultiply() і брала від неї значення для змінної nResult (це значення має використовуватися замість жорстко певного значення 10).

4. Створіть у Word новий документ і переконайтеся, що створені вами процедури та функції працюють правильно.

5. Щоб створена вами процедура AutoNew(), не заважала подальшій роботі, закоментуйте увесь її код.

 

 

 

Відповідь до завдання

1. Запустіть Word та натисніть клавіші <Alt> + <F11>. У вікні ProjectExplorer розкрийте вузол Normal | Modules і клацніть два рази лівою кнопкою мишки на рядку NewMacros.

2. Вставте у модуль NewMacros наступні рядки для функції fMultiply():

Public Function fMultiply (nMl As Integer, nM2 As Integer)

fMultiply = nMl * nM2

End Function

Код для процедури AutoNew() може виглядати так (змінений код виділено жирним):

Public Sub AutoNew()

Dim nMult1 As Integer

Dim nMult2 As Integer

Dim nResult As Integer

nMultl = CInt(InputBox("Уведіть перше число:"))

nMult2 = CInt(InputBox("Уведіть друге число:"))

nResult = fMultiply (nMultl, nMult2)

Selection.InsertAfter nResult

Selection.Collapse

wdCollapseEnd

End Sub

4. Для того щоб закоментувати код AutoNew(), виділіть увесь код цієї процедури (включаючи Public Sub AutoNew() і End Sub) і натисніть кнопку Comment Block на панелі інструментів Edit.

Вбудовані функції мови VBA

У мові VBA передбачено кілька десятків вбудованих функцій. Вони доступні у будь-якій програмі на мові VBA, при цьому байдуже, у середовищі якого програмного продукту ми знаходимося - Excel, Word, Access або AutoCAD. Використовуються вони дуже активно, і у багатьох ситуаціях без них не обійтися. Професійні програмісти застосовують їх абсолютно автоматично, а звичайним користувачам порада: витратити кілька годин на знайомство з ними, тому що без знання цих функцій ефективно працювати у VBA не вийде. Додатковим аргументом на користь їх вивчення є те, що практично ідентичний набір функцій є у звичайному Visual Basic і VBScript, а багато хто з цих функцій з тими ж назвами і синтаксисом зустрічаються і в інших мовах програмування - C++, Delphi, Java, JavaScript тощо.

У довідці з VBA вбудовані функції згруповані по буквах (Рис.6).

 

Рис.6. Довідка з вбудованих функцій

 

Функції перетворення та перевірки типів даних

У програмах на VBA дуже часто доводиться перетворювати значення з одного типу даних в іншій. Кілька типових ситуацій, коли цим доводиться займатися:

 1. перетворення з рядкового значення у числове при прийомі значення від користувача через InputBox();

2. перетворення значення дати/часу в рядкові, коли нам потрібно відобразити дату або час однаково незалежно від регіональних налаштувань на комп'ютерах користувачів;

3. перетворення значення з рядкового у дату/час для застосування спеціальних функцій дати/часу.

Частіше за все для конвертації типів даних використовуються функції, ім'я яких складається з префікса 'С' (від слова Convert) та імені типу даних. Перелік цих функцій наступний: CBool(), CByte(), CCur(), CDate() CDbl(), CDec(), CInt(), CLng(), CSng(), CStr(), CVar(), CVDate(), CVErr().

Переглянути, що в підсумку вийшло, можна за допомогою функції TypeName(), яка повертає ім'я використовуваного типу даних, наприклад:

nVarl = CInt (InputBox("Уведіть значення"))

MsgBox TypeName(nVar1)

У даному випадку ця функція поверне "integer".

Крім того, існує ще кілька корисних для конвертації функцій.

1. Str() - дозволяє перевести числове значення в рядкові. Робить майже те ж саме, що й CStr(), але при цьому вставляє пробіл перед позитивними числами.

2. Val() - "витягує" з суміші цифр і букв тільки числове значення. При цьому функція читає дані зліва направо і зупиняється на першому нечисловому значенні (допускається єдине нечислових значення - точка, яка буде відокремлювати цілу частину від дробової). Дуже зручно, коли у нас упереміж з числовими даними прописуються одиниці вимірювання або валюта.

3. isNumeric() і isDate() - перевіряють значення на відповідність, щоб не виникло помилок при конвертації. Для перевірки на відповідність спеціальним значенням можна використовувати функції isArray(), isEmpty(), isError(), isMissing(), isNull() і isObject(). Всі ці функції повертають True або False в залежності від результатів перевірки переданого їм значення.

4. Hex() і Oct() - перетворюють десяткові дані в рядкові представлення шістнадцяткових і восьмерічних значень.

Рядкові функції

Це найбільш часто використовувані функції. Потрібні вони постійно, і необхідно знати їх дуже добре.

1. ASC() - ця функція дозволяє повернути числовий код для переданого символу. Наприклад, ASC("D") поверне 68. Цю функцію зручно використовувати для того, щоб визначити наступну або попередню літеру. Зазвичай вона використовується разом з функцією Chr(), яка виробляє зворотну операцію - повертає символ по переданному його числовому коду. Наприклад, такий код в Excel дозволяє написати в комірки з А1 по А20 послідовно літери російського алфавіту від А до У:

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() повертає тільки перший байт числового коду для символу, a AscW() повертає код для символу в кодуванні Unicode.

2. Chr() - повертає символ за його числовим кодом. Крім того, що використовується у парі з функцією ASC(), без неї не обійтися ще в одній ситуації: коли потрібно вивести службовий символ. Наприклад, нам потрібно надрукувати у Word значення "Газпром" (в лапках). Лапки - це службовий символ, і спроба використовувати рядок виду:

Selection.Text = "" Газпром ""

призведе до „Синтаксична помилка”. А ось так все буде в порядку:

Range("b2") = Chr(34) & "Газпром " & Chr(34)     ‘Selection.Text = Chr(34) & "Газпром" & Chr (34)

Є варіанти цієї функції - ChrB() і ChrW(). Працюють аналогічно варіантів для функції ASC().

3. InStr() і InStrRev() - популярні функції. Дозволяють виявити у тілі рядкової змінної послідовність символів і повернути її позицію. Якщо послідовність не виявлено, то повертається 0. Функція InStr() шукає з початку рядка, a InStrRev() - з кінця.

4. Left(), Right(), Mid() - дозволяють узяти указану вами кількість символів з існуючої рядкової змінної ліворуч, праворуч або з середини відповідно.

5. Len() - повертає кількість символів у рядку (довжину рядка). Часто використовується з циклами, операціями заміни і т. п.

6. LCase() і UCаse() - переводять рядок у нижній і верхній регістри відповідно. Часто використовуються для підготовки значення до порівняння, коли регістр не важливий (прізвища, назви фірм, міст і т. п.).

7. LSet() і RSet() - заповнюють одну змінну символами іншої без зміни її довжини (відповідно ліворуч і праворуч). Зайві символи обрізаються, на місце відсутніх підставляються пробіли.

8. LTrim(), RTrim(), Trim() - прибирають пробіли відповідно ліворуч, праворуч або ліворуч і праворуч.

9. Replace() - замінює у рядку одну послідовність символів на іншу.

10. Space() і Sring() - повертають рядок із зазначеною вами кількістю пропусків або символів відповідно. Зазвичай використовуються для форматування виведення разом з функцією Len(). Ще одна схожа функція - Spc(), яка використовується для форматування виводу на консоль. Вона розмножує пробіли з урахуванням ширини командного рядка.

11. StrComp() - порівнює два рядки.

12. StrCconv() - перетворює рядокUnicode і назад, у верхній і нижній регістри, першу букву слів з великої тощо).

13. StrReverse() - "перевертає" рядок, розмістивши її символи у зворотному порядку.

14. Tab() - ще одна функція, яка використовується для форматування виводу на консоль. Розмножує символи табуляції у тій кількості, яку ви укажете. Якщо ніяка кількість не указана, просто вставляє символ табуляції. Для вставки символу табуляції у рядкові значення можна також використовувати константу vbTab.

Функції для роботи з числовими значеннями

Функцій для роботи з числовими значеннями у VBA дуже багато. Використовуються вони рідше, ніж рядкові функції, але в багатьох ситуаціях без них не обійтися.

В Excel є свій власний потужний набір вбудованих функцій для роботи з числовими значеннями, які цілком доступні з VBA.

Крім того, якщо у вікні Сервіс | Надстройки встановити прапорець в рядку Пакет аналізу, в Excel буде доданий додатковий набір аналітичних наукових і фінансових функцій, а якщо встановити прапорець навпроти Analysis ToolPak - VBA, то ці функції стануть доступні з VBA (тільки всередині Excel, у якому встановлена ця надбудова).

Далі приведені тільки універсальні функції VBA для роботи з числовими значеннями. Ці функції доступні з будь-яких додатків VBA.

1. Abs() - ця функція повертає абсолютне значення переданого їй числа (те ж число, але без знаку). Наприклад, Abs(3) і Abs(-3) повернуть одне і те ж значення Зазвичай використовується тоді, коли нам потрібно визначити різницю між двома числами, але при цьому ми не знаємо, яке число - перше чи друге - більше. Результат віднімання може бути позитивним і негативним. Щоб він був тільки позитивним, використовується ця функція.

2. Int(), Fix() і Round() - дозволяють по-різному округлюються числа, Int() повертає найближче менше ціле, Fix() відкидає дробову частину, Round() округляє до указаної кількості знаків після коми. При цьому Round() працює не зовсім правильно, у чому легко переконатися: MsgBox Round (2.505,2)

 

 

Рис.7. Результат роботи Round(2.505,2) та MsgBoxFormat(2.505, "#,## 0.00")

 

 

 

Тому на практиці для округлення краще використовувати Format(): MsgBox Format (2.505, "#,## 0.00 ")

3. Rnd() і команда Randomize - використовуються для отримання випадкових значень (дуже зручно, наприклад, при генерації імен файлів). Звичайний синтаксис при застосуванні Rnd() виглядає так:

випадкове_число = Int(мінімум + (Rnd() * максимум))

MsgBox (Int(1 + (Rnd() * 100)))

Однак перед викликом функції Rnd() необхідно виконати команду Randomize для ініціалізації генератора випадкових чисел.

4. SGN() - дозволяє повернути інформацію про знак числа. Повертає 1, якщо число додатне, -1, якщо негативне, і 0, якщо число дорівнює 0.

Функції для роботи з датою і часом

Без функцій дати і часу зазвичай обійтися дуже складно. Найважливіші функції VBA для роботи з датою/часом:

1. Date(), Time(), Now() - повертають відповідно поточну системну дату, поточний системний час і дату і час одночасно. Встановити їх можна за допомогою однойменного відповідного оператора, наприклад, так:

Date = # 5/12/2004 #

2. DateAdd() - додає до дати указану кількість років, кварталів, місяців і так далі до секунд.

3. DateDiff() - повертає різницю між датами (в одиницях від років до секунд).

4. DatePart() - дуже важлива функція, що повертає указану вами частина дати (наприклад, тільки рік, тільки місяць або тільки день тижня,

5. DateSerial() - створює значення дати на основі переданих символьних значень. Те саме робить функція Datevalue(), але при іншому форматі прийнятих значень. Аналогічним чином (для часу) працюють TimeSerial() і TimeValue().

6. Day() (а також Year(), Month(), Weekday(), Hour(), Minute(), Second()) - спеціалізовані замінники функції DatePart(), які повертають потрібну вам частину дати.

7. MonthName() - повертає ім'я місяця словами за його номером. Значення, що повертається залежить від регіональних налаштувань: українська, російська назва місяця, тощо.

8. Timer() - повертає кількість секунд, що минули з опівночі.

Якщо потрібно отримати додаткові можливості роботи з датою/часом, то у вашому розпорядженні об'єктна модель Outlook. Наприклад, за допомогою її можна отримати інформацію про свята та робочі/ неробочі дні більшості країн світу.

Функції для форматування даних

Для форматування даних у вашому розпорядженні функція Format() і цілий набір функцій, які починаються з префікса Format ... (FormatNumber(), FormatCurrency(), FormatDateTime() тощо) Синтаксис функції Format() виглядає так:

Format (вираз, "формат")

Ця функція приймає вираз і форматує його у відповідності з параметром "формат". Кілька прикладів використання:

Format (15/20, "Percent"); Format (Date, "Long Date"); Format (1, On / Off ");

Format (334.9," # T # 0.00 "); Format ( "Просто текст", ">")

Для інших функцій Format ... те, що вони роблять, зрозуміло з назв. Особлива ситуація - коли треба, щоб дата відображалась на комп'ютерах користувачів одноманітно незалежно від регіональних налаштувань. Як рішення можна використовувати функцію DatePart(), за допомогою її перекласти дату "по частинах" у текстовий формат і склеїти потрібним чином.

Функції для організації взаємодії з користувачем

У багатьох програмах VBA необхідно забезпечити взаємодію з користувачем - проінформувати його про щось і, можливо, отримати від нього відповідну реакцію. У принципі, для користувача можна просто вивести текст у вікні програми (наприклад, у цьому документі Word) або скористатися формою та елементами управління.

Можна вивести інформацію користувачеві, скориставшись функцією MsgBox(), повний її синтаксис:

MsgBox(Текст [, кнопки] [, заголовок_окна] [, файл_довідки, мітка_у_файлі_довідки])

Можливостей у MsgBox() досить багато:

1. можна відображати різну кількість кнопок (OK, Cancel, Abort, Retry, Ignore, Yes, No);

2. можна показувати символи Critical (червоний коло з хрестом), Exclamation, (знак оклику в жовтому трикутнику), Question (знак питання), Information (літера "I");

3. можна вибирати кнопку за замовчуванням;

4. можна робити вікно модальним або звичайним.

У залежності від того, на яку кнопку натиснув користувач, функція повертає відповідне значення (усього 7 варіантів - Табл.2).

Табл.2. Кнопки, константы, значения.

Constant

Value

Description

vbOK

1

OK

vbCancel

2

Cancel

vbAbort

3

Abort

vbRetry

4

Retry

vbIgnore

5

Ignore

vbYes

6

Yes

vbNo

7

No

 

Приклад повернення значення від MsgBox() може бути таким:

Public Sub dd()

Dim nVar As Integer

nVar = MsgBox("Будемо робити?", vblnformation + vbOKCancel, "Демонстраційне вікно повідомлення")

  MsgBox (nVar)  ‘якщо значення nVar дорівнює 1, то користувач натиснув ОК, якщо 2, то Скасування (Cancel).

End Sub

Іноді (наприклад, при пакетній обробці даних) треба, щоб вікно повідомлення через деякий час закривалося само собою. Це можна зробити за допомогою методу Popup() об'єкта WScript.Shell. Для цього в проект через меню Tools | References потрібно додати посилання на Windows Script Host Object Model, а після цього використовувати наступний код:

Dim oShell As New WshShell

oShell.Popup "Test", 5

В іншому функціональність вікна, що отримали, однакова з MsgBox(). Код повернення, якщо користувач не натиснув ні на яку кнопку, дорівнює -1. Найпростіший спосіб прийняти інформацію від користувачів - скористатися функцією InputBox(). Все дуже просто:

Dim InputName

InputName = InputBox("Введите Ваше имя")

MsgBox("Вы ввели:" & InputName)

 

 

 

 

 

 

 

 

Рис.8. Результат роботи програми

 

Для InputBox() можна указати текст запрошення, заголовок вікна, значення за замовчуванням, місцезнаходження вікна і файл довідки. Усе, що уведено користувачем, InputBox() автоматично переводить у тип даних String, тому може знадобитися перетворення.

Якщо потрібно забезпечити більш складну взаємодію з користувачем, можна подумати про застосування форми, можливості самого документа Office або помічника (Office Assistant). Дуже потужні можливості забезпечує застосування об'єктної моделі Internet Explorer.

Функції - замінники синтаксичних конструкцій

У VBA передбачено кілька функцій, які дозволяють заміняти синтаксичні конструкції умовного переходу, наприклад If ... Then ... Else або Select Case. Якихось переваг застосування цих функцій не дає (може бути, код стане на кілька рядків коротше), але професійні програмісти дуже люблять їх використовувати.

Починаючим програмістам рекомендується застосовувати звичайні синтаксичні конструкції, щоб не плутатися. Однак для читання чужого коду необхідно знати і ці функції.

1. Choose() - приймає число (номер значення) і список значень. Повертає значення зі списку, порядковий номер якого відповідає числу, передається . Наприклад, виклик функції:

Choose(2, "Перший", "Другий", "Третій")

поверне "Другий".

2. IIf() - розшифровується як Immediate If, тобто. "негайний If. Це спрощений варіант If ... Else, коли перевіряється умова і повертається одне з двох значень. Наприклад:

IIf (N> 10, "Більше десяти", "Менше або дорівнює десяти")

3. Switch() - бере необмежену кількість пар типу "вираз = значення", перевіряє кожен вираз на істинність та повертає значення для першого виразу, який виявився істинним. Наприклад:

Function Language(CityName As String)

Language = Switch(CityName = "Москва", "русский", CityName = "Париж", "французький", _

CityName = "Берлін", "німецький")

End Function

Функції для роботи з масивами

Як уже говорилося, при програмній роботі з додатками Microsoft Office масиви використовуються рідко. Замість них застосовуються колекції. Однак у VBA передбачені можливості і для роботи з масивами.

1. Array() - дозволяє автоматично створити масив потрібного розміру і типу і відразу завантажити в нього передані значення:

Public Sub ол()

Dim myArray As Variant

myArray = Array(10, 20, 30)

MsgBox myArray(2)    '30 (0  =10;  1  =20;  2  =30)

End Sub

2. Filter() - дозволяє на основі одного масиву отримати інший, відфільтрувавши у вихідному масиві потрібні нам елементи.

3. LBound(), UBound() - повертають відповідно інформацію про нижню межу масиву (номер першого наявного у масиві значення) і верхню межу (номер останнього наявного значення).

4. Join() - з'єднує безліч рядків, що складають масив, в одну строкову змінну. Як роздільник за замовчуванням використовується пробіл, але можна указати і свій розділювач. Зворотна функція, яка створює масив з одного рядка, - Split(). Ці функції дуже зручні наприклад, при обробці значень, отриманих з бази даних, електронної таблиці, макетного файлу тощо.

Функції для роботи з файловою системою

У VBA передбачений набір вбудованих функцій для виконання різних операцій з файлами, каталогами, дисками та іншими об'єктами файлової системи. Але не забувайте, що крім цих функцій (загальних для всіх програм, в яких використовується VBA) у нас є, по-перше, можливості, специфічні для даного додатка (наприклад, відкриття та збереження документа Word засобами об'єктної моделі Word). По-друге, на будь-якому комп'ютері під керуванням Windows є об'єктна бібліотека Microsoft Scripting Runtime, дуже проста і зручна для виконання різних операцій з файлами, каталогами та дисками. Можна додати в проект VBA посилання на неї і використовувати усі наявні у ній можливості. Якщо, приміром, потрібно пройтися по усіх файлах у цьому каталозі і що-небудь з ними зробити (наприклад, завантажити в Excel усі файли звітів, які прийшли з філій), можна використовувати саме цю бібліотеку. Довідку по ній можна знайти на сайті Microsoft (www.microsoft.com/Scripting).

Далі наведені вбудовані функції для роботи з файловою системою, передбачені у VBA.

1. CURDIR() - функція, яка повертає шлях до поточного каталогу, у якому будуть зберігатися файли вашої програми за замовчуванням.

2. Dir() - дозволяє шукати файл або каталог за указаним шляхом на диску.

3. EOF() - при операції читання чи запису в файл на диску ця функція поверне True, якщо ви перебуваєте у кінці файлу.

4. Error() - дозволяє повернути опис помилки по її номеру. Генерувати помилку потрібно за допомогою методу RaiseError() спеціального об'єкта Err.

5. FileAttr() - дозволяє визначити, як саме був відкритий вами файл у файловій системі: на читання, запис, додавання, в двійковому або текстовому режимі тощо.

6. FileDateTime() - дозволяє отримати інформацію про останнє за часом звернення до указаного вами файлу. Якщо до файлу після створення жодного разу не зверталися, то функція поверне час створення файлу.

7. FileLen() - повертає довжину зазначеного вами файлу в байтах.

8. FreeFile() - дозволяє визначити наступну вільну цифру, яку можна використовувати як номер файлу при його відкритті.

9. GetAttr() - дозволяє звернутися до файлу та отримати інформацію про його атрибути (прихований, доступний тільки для читання, архівний і т. п.).

10. Input() - дозволяє зчитати інформацію з відкритого файлу. Наприклад, зчитати інформацію з файлу C:textl.txt і вивести її у вікно повідомлень можна так:

Dim MyChar 'Відкриваємо файл функцією Open() на читання

Open "$: textl.txt" For Input As # 1

Do While Not EOF (L)   'Поки файл не скінчився,

                                        'Отримуємо по одному символу і додаємо його до попередніх

MyChar = MyChar & Input (1, # 1) Loop

Close # 1 'Закриваємо файл

MsgBox MyChar            'виводять його вміст у вікно повідомлення

Варіант цієї функції - InputB() - дозволяє указати кількість байтів, які треба зчитати з файлу.

11. Loc() - від Location (місцезнаходження) - повертає число, яке визначає поточне місце вставки або читання у відкритому файлі. Схоже працює функція Seek(), але вона повертає інформацію про позицію, з якої буде виконуватися наступна операція читання або вставки.

12. LOF() - від length of file - дозволяє визначити довжину відкритого файлу в байтах.

Open - це не функція, а команда VBA, але без неї операції читання і запису з файлами на диску не зробити. Довідку по ній можна знайти за словосполученням "Open Statement". Як мінімум, їй потрібно передати ім'я файлу, що відкривається, режим відкриття та номер файлу (номер файлу - це його ідентифікатор для передачі іншим функціям, його призначаєте ви самі). Наприклад, щоб відкрити файл на читання з можливістю одночасного звернення до нього інших користувачів, можна використовувати код виду:

Open "C:filel.txt" For Output Shared As # 1

Інші функції VBA

1. DoEvents() - це дуже важлива функція. Вона дозволяє на час відволіктися від виконання будь-якої операції VBA і передати управління операційній системі, щоб обробити  події, що накопичилися в операційній системі (наприклад, натискання клавіш користувачем). Після цього продовження операцій VBA триває. Якщо у вас виконується дуже тривала операція (пошук на дисках, обробка великого обсягу даних тощо) і ви хочете дати користувачеві можливість швидко перервати цю операцію, можна виконувати цю команду, наприклад, кожен раз після обробки певної "порції" даних.

2. Environ() - повертає абсолютний шлях для змінних оточення комп'ютера (повний список змінних, доступних на вашому комп'ютері, можна переглянути, якщо у командному рядку виконати команду SET). Наприклад, вам потрібно записати щось у файл в тимчасовому каталозі. Абсолютний шлях до тимчасового каталогу на вашому комп'ютері можна отримати так:

MsgBox Environ("TEMP")

3. GetAllSettings() - дозволяє отримати (у вигляді двовимірної масиву) з реєстру всі параметри, які відносяться до зазначеного вами додатку. Функція SaveSetting() дозволяє записати до реєстру, а DeleteSetting() - видалити. GetSetting() дозволяє отримати інформацію про певний параметр. Ці методи дозволяють звертатися тільки до одного дуже далекого куточку реєстру в гілці HKEY_CURRENT_USERS. Звертатися до інших параметрів реєстру за допомогою цих методів марно. Рекомендується для роботи з реєстром використовувати об'єктну бібліотеку Windows Script Host Object Model, яка також є на будь-якому комп'ютері під керуванням Windows 2000, ХР і 2003. Потрібний об'єкт називається WshShell, методи - RegRead(), RegWrite() і RegDelete(). Довідку по об'єктах цієї бібліотеки можна знайти на сайті Microsoft (www.microsoft.com/Scripting).

4. Partition() - визначає, до якого діапазону з наборів значень відноситься передане вами число, та повертає опис цього діапазону (у вигляді рядка). Зазвичай використовується при виконанні запитів до баз даних.

5. QBColor() - дозволяє перевести позначення кольору зі старого номерного позначення з можливими 16 значеннями в RGB-код, який розуміє VBA. Зазвичай використовується при виправленні старих успадкованих програм.

6. RGB() - ще одна функція для роботи з кольором. Дозволяє повернути RGB-код, який можна використовувати для визначення кольору, прийнявши три значення для кольорів: червоного (Red), зеленого (Green) і синього (Blue). Значення для кожного з основних кольорів можуть варіюватися від 0 до 255. Наприклад, найзеленіший з можливих кольорів вийде, якщо передані цієї функції значення будуть виглядати як RGB (0, 255, 0).

7. Shell() - дозволяє запустити з VBA зовнішній програмний файл і повернути інформацію про його Program ID в операційній системі. Звичайно застосовується досвідченими розробниками при використанні ними у програмах можливостей Windows API. З практичної точки зору цю функцію можна використовувати для запуску будь-яких зовнішніх програм з вашого додатку, хоча застосування спеціальних об'єктів WshShell і WshExec з бібліотеки Windows Script Host Objecl Model зручніше (можна передавати у вікно клавіатурні комбінації, приймати та передавати значення через командний рядок і т. п.). Ця бібліотека є на будь-якому комп'ютері Windows, довідку по ній можна знайти на сайті www.microsoft.com/Scripting.

8. TypeName() - функція, яка повертає ім'я типу даних для переданої їй змінної. Дуже зручна для визначення типу даних для значення, отриманого з бази даних або шляхом виклику методу якогось об'єкту.

9. VarType() - робить майже те саме, але замість імені повертає числовий код, який указує тип даних. Можна використовувати для програмних перевірок типів даних для змінних.


 

 
   
 
Этот сайт был создан бесплатно с помощью homepage-konstruktor.ru. Хотите тоже свой сайт?
Зарегистрироваться бесплатно