Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
EDO_VBA.doc
Скачиваний:
3
Добавлен:
11.08.2019
Размер:
494.08 Кб
Скачать

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

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

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

Dim nMyAge As Integer

nMyAge = nMyAge + 10

MsgBox nMyAge

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

Dim nMyAge As Integer

Розшифруємо цей рядок. Dim - це область видимості змінної. У VBA передбачено 4 ключових слова для визначення області видимості змінних. Dim - використовується в більшості випадків. Якщо змінна оголошена як Dim в області оголошень модуля, то вона буде доступна в усьому модулі, якщо в процедурі - тільки на час роботи цієї процедури.

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

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

Наприклад:

Static nVar1 As Integer

nVar1 = nVar1 + 1

MsgBox nVar1

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

 ім'я має починатися з літери;

 Жодних пробілів і символів пунктуації (виняток символ підкреслення);

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

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

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

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

 ім'я змінної має починатися з префікса, записаного малими літерами.

 Префікс вказує, що саме буде зберігатися в цій змінній:

• str (або s) - String, символьне значення;

•fn (або r) - функція;

• sub - процедура;

• c (або всі літери імені великі) - константа;

• b - логічне, логічне значення (True або False);

• d — дата;

• obj (або o) — вказівка на об’єкт;

• n — числове значення;

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

MsgBox objMyDocument.Name

Sub CheckDateSub ()

В ранніх версіях VB не було слова Const, усі константи визначалися як змінні, а для відмінності їх записували великими літерами, між словами ставили символ підкреслення, наприклад COMPANY_NAME. Багато програмістів використовують такий підхід для позначення констант і зараз (але використання ключового слова Const тепер обов’язкове. Третя частина нашого оголошення (As Integer) - це вказівка на тип даних нашої змінної. Тип даних визначає, дані якого виду можна буде зберігати в цій змінній. У VBA передбачені наступні типи даних:

числові:

• Байт - ціле число від 0 до 255;

• Integer - ціле число від -32768 до 32767;

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

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

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

• Single иі Double - значення з плаваючою комою (Double в 2 рази ільше));

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

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

ˆ дата і час (Date — від 01.01.100 до 31.12.9999);

ˆ логічний (Boolean — може зберігати тільки значення True і False);

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

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

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

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

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

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

ˆ при визначенні змінних можна використовувати так звані символи визначення типу ((%) — Integer, ($) — String і т. п.). Наприклад, в нашому прикладі можна закоментувати рядок:

' Dim nVar1 As Integer

а в іншому рядку написати:

nVar1% = nVar1% + 1

Такий підхід є застарілим і до використання не рекомендується.

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

Dim nVar1

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

nVar1 = nVar1 + 1

MsgBox nVar1

буде цілком працездатним. Якщо ми використовуємо змінну в програмі без її оголошення, то буде автоматично створена нова змінна типу Variant. Проте оголошувати змінні треба обов'язково! І при цьому бажано явно вказувати потрібний тип даних. Тому що:

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

ˆ при роботі з об'єктами підказка за властивостями і методами діє тільки тоді, коли ми спочатку оголосили об'єктну змінну з потрібним типом. Наприклад, в 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 — це зовсім не англійська буква N, а українська П. На вигляд у вікні редактора коду відрізнити їх дуже складно. В той же час компілятор VBA, зустрівши такий код, просто створить нову змінну з типом даних Variant, у якої буде порожнє значення.

На виявлення такої помилки може знадобитися певний час. У той же час при встановленому Option Explicit проблема визначається миттєво. Можна оголосити декілька змінних в одному рядку, наприклад, так:

Dim nVar1 As Integer, s1 As String

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

nVar1 = 30

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

nVar1 = nVar1 + 1

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

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

sVar1 = "Hello"

ˆ значення дата/час беруться в символи "грати" (#) :

dVar1 = #05/06/2004#

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

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

nVar1 = &HFF00

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

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

ˆ у змінних усіх числових типів даних — 0;

ˆ у строкових змінних змінної довжини — "" (рядок нульової

довжини);

ˆ у строкових змінних фіксованої довжини — рядок заданої довжини

з символами ASCII 0 (ці символи на екран не виводяться);

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

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

Приклад 1. Проаналізуйте роботу програми

Sub Hello()

Dim myName As String

Range("a1:p100") = ""

myName = InputBox("Введіть ваше ім'я:")

Cells(3, 1) = "Привіт " & myName & "!"

MsgBox "Привіт " & myName & "!"

End Sub

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]