ТОП 10:

Панель інструментів для роботи з макросами



У тому випадку, коли необхідно записати кілька макросів, доцільно використати спеціальну панель інструментів - Visual Basic , відкрити яку можна за допомогою команди View > Toolbars > Visual Basic (Вид > Панелі інструментів > Visual Basic).

Щоб почати запис першого макросу, потрібно клацнути на кнопці Record Macro (Записати макрос) панелі інструментів Visual Basic. У результаті на її місці з'явиться кнопка Stop Recording (Зупинити запис). Після завершення запису макросу й натискання кнопки Stop Recording (Зупинити запис) панель інструментів Visual Basic залишається відкритої, а користувач може без зволікання приступати до запису наступного макросу.

Запуск макросу

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

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

По-перше, це можна зробити шляхом вибору імені макросу. Активізуйте команду Tools > Macro > Macros (Сервіс > Макрос * Макроси), відзначте ім'я потрібного макросу (у нашому прикладі — Macrol у діалоговому вікні Macro (Макрос), де втримується перелік всіх існуючих макросів, і клацніть на кнопці Run (Виконати).

По-друге, макрос можна запустити за допомогою натискання клавіші Ctrl у комбінації із клавішею, призначеної в поле Shortcut key (Сполучення клавіш) діалогового вікна Record Macro (Запис макросу). Якщо комбінація для запуску макросу включає прописну букву, необхідно також натиснути клавішу Shift. Клавішу CapsLock при запуску макросу використати не можна. Якщо ви не знаєте, яка комбінація клавіш застосовується для запуску даного макросу, клацніть у вікні Macro (Макрос) на кнопці Options (Параметри) і інформація про це буде відображена в поле Shortcut key (Сполучення клавіш) вікна

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

Запустите макрос і перевірте, чи всі записані макрорекордером операції виконуються.

Редагування макросу

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

Переглянути й відредагувати макрос дозволяє команда Tools > Macro > Visual Basic Editor (Сервіс > Макрос > Редактор Visual Basic), але можна також скористатися кнопкою Visual Basic Editor (Редактор Visual Basic) панелі інструментів Visual Basic або комбінацією клавіш Alt+Fll. У кожному разі після активізації зазначених елементів відкривається вікно Microsoft Visual Basic. Правда, уміст VBA-модуля в цьому вікні поки не відображається. Щоб почати редагування, необхідно у вікні Project (Проект) відкрити папку Modules (Модулі) і вибрати ім'я модуля (наприклад, Modulel) - текст макросу відобразиться у вікні модуля (рис. 7.1).

Рисунок 7.1. Макрос, записаний в VBA-модулі

Отже, у даний момент ми перебуваємо в режимі роботи з VBA-модулем. Як уже було відзначено, редагування VBA-модулів виконується в середовищі Visual Basic for Applications, у якій користувачеві надаються засоби для розробки програм, аналізу зв'язків між об'єктами (VBA є об’єктно-орієнтованою мовою програмування), налагодження програм і їхньої організації в єдиний програмний комплекс (проект).

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

Нижче наведений текст нашого макросу, записаний в VBA-модулі.

Sub Макрос1()

'

' Макрос1 Макрос

' Макрос записаний 05.04.2007

'

' Сполучення клавіш: Ctrl+g

'

Application.DisplayFullScreen = True

Cells.Select

Selection.NumberFormat = «[$S/.-280A] #,##0.00»

With Selection.Font

.Name = «Arial»

.Size = 10

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

With Selection.Font

.Name = «Arial»

.Size = 14

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

End Sub

Як бачите, макрос починається з оператора Sub. За ним треба ім'я макросу, що служить для ідентифікації такого. Якщо це ім'я змінити, відповідним чином зміниться ім'я макросу в діалоговому вікні Macro (Макрос). Після імені йде текст макросу, якому можна редагувати, а також постачати коментарями. На початку кожного коментарю повинен стояти символ апострофа ('). Завершується макрос оператором End Sub.

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

Для активізації режиму налагодження в діалоговому вікні Macro (Макрос) потрібно натиснути кнопку Step Into (Увійти), у результаті чого буде відкрите вікно Microsoft Visual Basic (рис. 7.2), що містить текст макросу. Тут оператор, оброблюваний на черговому кроці, виділяється жовтими кольорами. Виконати черговий крок макросу можна за допомогою команди Step Into (Пошагово) меню Debug (Налагодження) або клавіші F8. Оскільки покрокове виконання може зайняти дуже багато часу, у рядках макросу варто встановити крапки зупинки, клацнувши ліворуч від цікавлячої команди. По досягненні крапки зупинки обробка макросу переривається, а на екрані з'являється вікно налагодження, у якому можна вказати, у якому режимі - покроков або звичайному - повинне бути продовжене виконання макросу.

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

With Selection.Font

.Name = «Arial»

.Size = 10

.Strikethrough = False

.Superscript = False

.Subscript = False

.OutlineFont = False

.Shadow = False

.Underline = xlUnderlineStyleNone

.ColorIndex = xlAutomatic

End With

Робота макросу при цьому не зміниться.

Рисунок 7.2. Вікно налагодження макросу

Видалення макросу

- Відкрийте книгу, що містить макрос, що потрібно видалити.

- Виберіть команду Tools > Macro > Macros (Сервіс > Макрос > Макроси).

- У списку Macros in (Перебуває в) вікна, що відкрилося, Macro (Макрос) укажіть елемент This Workbook (Ця книга).

- У списку Macro name (Ім'я макросу) виберіть ім'я макросу, якому потрібно видалити, і клацніть на кнопці Delete (Видалити).

Основи Visual Basic

Програми в середовищі VBA пишуться мовою Visual Basic, як було сказано вище. Тому для повноцінної роботи з макросами потрібно знати основи цієї мови, щоб написати код програми, що буде маніпулювати об'єктами документа, елементами управління й робити якісь обчислення. Це самий складний етап.

У всіх мовах високого рівня програмний код складається з:

· Змінних

· Виразів

· Операторів

· Керуючих структур

· Функцій

· Класів і об'єктів

Опишемо кожен тип докладніше:

Змінні

В Visual Basic змінні зберігають інформацію (значення). При їхньому використанні Visual Basic резервує область у пам'яті комп'ютера для зберігання даної інформації. Кожна змінна має своє ім'я. Воно може досягати 255 символів у довжину, починається завжди з букви латинського алфавіту, за якою можуть іти інші літери, цифри й знак підкреслення. Регістр символів значення не має. Наведемо кілька прикладів імен змінних:

numOfLetters – підходить

2Bottle - невірно, тому що починається не з літери

ThisIsVeryLongName - підходить, довжина 18 символів

sng.Cos - не підходить, тому що використається крапка

Кожна змінна має певний тип. Усього в VB 14 типів змінних. Крім того, програміст може визначити й свій тип. Перелічимо основні типи змінних VB:

Byte - призначений для зберігання цілих чисел від 0 до 255. Якщо змінній такого типу присвоїти значення, що виходить за ці межі, то Visual Basic згенерує помилку.

Integer - призначений для зберігання цілих чисел у діапазоні від -32768 до +32767, тобто розмір пам'яті, виділюваної під таку змінну складає 2 байти. (256*256=65536). Символ для позначення - "%". Функція символу буде розглянута далі.

Long- призначений для зберігання цілих чисел у діапазоні від 2147483648 до +2147483647, тобто розмір пам'яті, що виділяється під таку змінну становить 4 байти. (65536*65536=4294967296). Символ для позначення - "&".

String- призначений для зберігання строкової (символьної) інформації, тобто попросту кажучи - тексту. Може зберігати до 2 Гб. тексти. Символ для позначення - "$".

Single- призначений для зберігання дробових чисел, з точністю до 7 цифр. Діапазон негативних значень від -3.402823Е38 до -1.401298Е-45. Діапазон позитивних значень від 1.401298Е-45 до 3.402823Е38. Довжина числа може досягати 38 знаків. Займає 4 байти пам'яті. Обчислення з даними змінними будуть приблизними й менш швидкими, ніж зі змінними цілого типу. Символ для позначення - "!".

Double- призначений для зберігання дробових чисел, з точністю до 16 цифр.

Діапазон негативних значень від 1.79769313486232Е308 до ‑4.94065645841247Е-324.

Діапазон позитивних значень від 4.94065645841247Е-324 до 1.79769313486232Е308.

Довжина числа може досягати 300 знаків. Займає 8 байта пам'яті. Обчислення з даними змінними будуть приблизними й менш швидкими, ніж зі змінними цілого типу. Використовується для наукових розрахунків. Символ для позначення - "#".

Currency- Даний тип створений для того, щоб уникнути помилок при перетворенні чисел з десяткової форми у двійкову й навпаки (Неможливо представити 1/10 як суму 1/2, 1/4 і т.д). Даний тип може мати до 4 цифр після коми, і до 14 перед нею. Усередині даного діапазону обчислення будуть точними. Обчислення виконуються так само повільно, як і у випадку змінних Single і Double. Даний тип дуже підходить для фінансових розрахунків. Символ для позначення - "@".

Date- Цей тип даних дозволяє зберігати значення часу й дати в проміжку від напівночі 1 січня 100 року до напівночі 31 грудня 9999 року. Якщо змінній присвоюєтся тільки значення дати, то час дорівнює 00:00.

Boolean- дуже важливий і розповсюджений тип даних. Дозволяє зберігати так звані булеві значення, тобто тільки два значення - True і False (Правда й Неправда). Використовується тоді, коли вам потрібно зберігати тільки значення Так чи Ні.

Variant- Змінна типу Variant може містити дані будь-якого типу. Visual Basic автоматично робить необхідні перетворення даних, тому не стоїть турбуватися про це. Використання такого типу даних сповільнює роботу програми, тобто потрібен час і ресурси для перетворення типів. Тому варто втримуватися від застосування цього типу даних, за винятком специфічних випадків, наприклад, повернення функцією масиву можливо тільки при використанні типу Variant.

В Visual Basic змінні оголошуються за допомогою оператора Dim, після якого треба As і Ім'я_Типу змінної. Наприклад:

Dim a As Long

Dim b As Byte

Dim c As Long

Dim numOfLetters As Long

Dim myString As String

Dim isLoaded As Boolean

Якщо не вказувати As Ім'я_Типу, то змінна буде оголошена як Variant.

Після оголошення змінної їй присвоюється значення за замовчуванням. Для стоки це - "" (порожній рядок). Для чисел - 0. Для Boolean - False. Змінна може бути використана відразу після оголошення.

Змінні можна оголошувати й в одному рядку, розділяючи оголошення комами:

Dim a As Long, b As Integer

Тут дуже важливо помітити наступну особливість. Логічно було б оголосити 3 змінні типи Long у такий спосіб:

Dim a, b, c As Long

Така звичка могла перейти, наприклад, з мови C. Там всі змінні дійсно мали б той тип, що зазначений після останньої змінної. Але не в Visual Basic! У результаті такого оголошення VB оголосить 3 змінні, перша й друга будуть мати тип Variant, і тільки третя - Long!

Присвоїти значення змінної можна за допомогою знака дорівнює "=". Наприклад:

a = 1234567

b = 234

c = 133

myString = "Visual Basic мова проста"

isLoaded = True

У даному прикладі змінним присвоювалися константи. Але часто буває необхідно присвоїти одній змінній значення іншої. Це робиться в такий спосіб:

a = b

можна, тому що змінна b "уміщається" у тип Long (234<4294967296)

a = b + c

тепер в a зберігається сума b + c.

b = c

теж можливо (133 < 255)

b = a

не можна, тому що змінна a не укладається у діапазон [0-255]. Відбудеться помилка.

myString = a

Visual Basic сам перетворить число 1234567 у рядок "1234567", а потім присвоїть це значення змінної myString. Також можлива зворотна дія.

isLoaded = True

усе ОК

myString = myString & " однозначно!"

тут відбувається злиття двох рядків, у результаті чого змінна myString містить рядок: "Visual Basic мова проста однозначно!".

isLoaded = a

можливо, тому що Visual Basic сам перетворить тип Long у тип Boolean. isLoaded буде містити True. Чому не False? Тому, що в VB False - це нуль, а будь-яке, не нульове значення - True

Вище, при описі типів змінних був зазначений символ для позначення. Цей символ можна (а іноді й потрібно) використовувати для оголошення змінної, але без використання зарезервованих слів As Тип. Наприклад:

Dim myLongParam&

Dim myString$

Тут оголошені 2 змінні, перша має тип Long, друга - String. Також можна вживати ці спецсимволи для явної вказівки типу константам, наприклад:

Call MyProc (myParam1, myParam2, 5&)

Тут, при виклику процедури MyProc, останній параметр має тип Long. Якби ми не вказали значок &, то параметр мав би тип Byte. Це необхідно при використанні API функцій.

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

myString = a

Змінна a має тип Long, а myString - String. Visual Basic сам перетворить змінну a у тип String, а потім присвоїть значення змінної MyString. Це необхідно знати. Також, Visual Basic надає у ваше розпорядження кілька функцій перетворення типів: CLng, CBool, CDate, CStr і т.д. Кожна функція перетворить вираз до відповідного типу. Розглянемо поширену помилку при програмуванні на VB. Нехай у нас є код типу:

Dim a As Byte

Dim b As Byte

Dim c As Long

a = 200

b = 200

c = a + b

Здавалося б, що якщо запустити такий код на виконання, то в змінній c буде перебувати значення 400 (200 + 200). Але та ба :(. Visual Basic на рядку c = a + b згенерує помилку Overflow (Переповнення). Справа в тому, що у виразі праворуч від знака дорівнює складаються 2 змінні типи Byte, і Visual Basic вирішує, що після обчислення цього виразу, повинен залишитися той же тип - Byte. Але якщо згадати те, що тип Byte може зберігати значення в діапазоні 0-255, можна зрозуміти чому VB генерує Overflow (Переповнення). 400 далеко виходить за діапазон Byte. Для вирішення цієї ситуації можна скористатися функцій перетворення типу CLng. Тоді працездатний код буде виглядати в такий спосіб:

Dim a As Byte

Dim b As Byte

Dim c As Long

a = 200

b = 200

c = CLng(a) + CLng(b)

Усе в порядку, 400 - входить у тип Long

Константи:

В Visual Basic можна повідомляти не тільки змінні, але й константи. Константа як і змінна, теж зберігає деяке значення, але на відміну від змінної збережене значення не може змінюватися. Щоб оголосити константу необхідно використати зарезервоване слово Const, за яким йде ім'я й значення (і можливо тип) константи:

Const PI = 3.1415

Тут оголошена константа з ім'ям pi і значенням 3.1415. Після оголошення вона може бути використана по призначенню.

Можна відзначити наступну особливість VB: для констант із плаваючою крапкою тип за замовчуванням - Double, для цілих чисел - Integer. (Це легко можна перевірити убудованою функцій VB - VarType). Для того, щоб явно задати тип константи, необхідно після імені задати тип, наприклад

Const PI As Long = 3 ' PI = 3, PI має тип Long

В Visual Basic існує дуже багато убудованих констант, які з легкістю можуть бути використані у ваших програмах. Наприклад, константа vbNewLine - містить 2 символи, з ASCII кодами 13 і 10, тобто перехід на новий рядок. Список констант можна подивитися в Object Browser. Для його виклику необхідно натиснути F2, перебуваючи в середовищі Visual Basic.

"Видимість" змінних:

Оголошувати змінні можна в самих різних місцях:

1. Усередині процедури (або функції). У цьому випадку змінна буде "видна" тільки в коді цієї процедури (або функції). Якщо ви спробуєте звернутися до такої змінної усередині коду іншої процедури, то Visual Basic згенерує помилку.

2. У самому верху коду форми, у місці, названому розділом General Declarations (розділ Глобальних Оголошень). Такі змінні будуть "видні" у будь-якім місці коду форми. Тобто у будь-якій процедурі (або функції) форми. Змінні в даному місці можуть бути оголошені за допомогою зарезервованих слів Private і Public. Розглянемо 3 визначення:

Dim myLocalVar1 As Byte

Private myLocalVar2 As Integer

Public myGlobalVar1 As Long

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

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

Form1.myGlobalVar1 = 234

3. У розділі General Declarations модуля. Тут діють ті ж правила, що й у розділі General Declarations форми. Private (або Dim) будуть "видні" тільки в коді модуля. А Public - скрізь. Відмінність спостерігається тільки в способі доступу до змінної. Тут не обов'язково вказувати ім'я модуля перед такою змінною. Можна просто вказати її ім'я й усе. Хоча це робити не рекомендується, тому що втрачається наочність. І, до того ж, якщо у вас 2 модулі, у яких оголошені змінні з однаковими іменами, то добратися до них можна тільки вказавши ім'я відповідного модуля перед ім'ям змінної.

Період існування змінних:

Період існування змінної означає, як довго змінна є доступною.

Змінні, оголошені в процедурі (або функції) будуть "живі" тільки поки виконується ця процедура (або функція). При виході із процедури - змінна видаляється. При черговому виклику цієї процедури - змінна заново ініціалізується. До речі, до слів Private, Public і Dim, у процедурах і функціях можна використовувати зарезервоване слово Static. Така змінна при повторному виклику цієї процедури не буде заново ініціалізуватися. Вона буде зберігати те значення, що було в ній після попереднього виклику. (такі змінні дуже зручно використовувати в обробці лічильника). Наприклад:

Static myStat As String ' Private Static змінна

Змінні рівня форми будуть "живі" тільки поки "жива" форма. Як тільки об'єктна змінна форми буде встановлена в Nothing (або після виконання оператора Unload), всі змінні рівня цієї форми видаляються.

Змінні рівня модуля "живі", поки "живе" ваш додаток. Тобто "живі" завжди.

Деякі зауваження:

Перед використанням змінної, її обов'язково потрібно оголосити. Це позбавить вас від зайвих помилок.

Змінним потрібно давати осмислені імена – намагайтеся не використати імена типу a1, a2, a3, ab, ccc і т.п, інакше рано або пізно ви заплутаєтеся у своїй же програмі! Найкраще змінним давати англійський еквівалент того, що зберігає дана змінна. Наприклад, для зберігання деякої суми грошей, змінна може бути названа як cashMoney. Якщо у вас із англійською «не дуже» , то можете використати трансліт, тобто змінну назвати, наприклад як summaDeneg. Кирилицю в імені змінної використати не рекомендується, хоча деякі версії VBA її підтримують, інакше можуть бути проблеми при використанні створених макросів в інших версіях.

Масиви

Їх ще називають списками.

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

В Visual Basic масиви визначаються в такий спосіб:

Dim myArray (10) As Long

Як ви могли помітити, визначення масиву відрізняється від визначення звичайної змінної тільки індексом, зазначеним у дужках. Цей індекс вказує розмірність масиву. У даному випадку масив myArray буде містити 11 елементів тому що нижня межа масиву починається з нуля. [0,1,2.....9,10]. Щоб задати певну розмірність можна використати зарезервоване слово To:

Dim myArray (5 To 10) As Long

Тут визначається масив, розмірність якого 6 елементів (5,6,7,8,9,10).

Загальний синтаксис визначення масиву наступний:

Dim Ім’ямасива{Номперш1 То Номост1, Номперш2 То Номост2, ...) [As [New] Ім’ятипу]

Багатомірні масиви

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

Dim chessTable (1 To 8, 1 To 8) As String

Цей масив являє собою таблицю з восьми чарунками по вертикалі й горизонталі.

Отже, масив визначений. Тепер необхідно довідатися - як же можна добратися до елементів цього масиву. Дуже просто! До елементів масиву потрібно звертатися по індексу, приміром, щоб змінити нульовий елемент масиву myArray потрібно написати:

myArray(0) = 1234

Або, наприклад:

chessTable (2,3) = "Пішак"

Вирази

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

b = 234

Тут ми присвоюємо змінної b значення 234. Іншими словами "234" - це вираз зі значенням 234. А тепер, наприклад розглянемо рядок:

c = b

Тут змінної c присвоюється вираження b. Значення цього виразу - b = 234. Іншими словами b - вираз, зі значенням 234. Розглянемо більше складний приклад виразу - функцію. Оголосимо функцію MyFunc, що повертає байт 234:

Public Function MyFunc() As Byte

MyFunc = 234

End Function

А тепер запишемо рядок:

c = MyFunc()

Як ви вже напевно догадалися, виразом тут є - MyFunc(), зі значенням 234. Після присвоєння змінній c виразу MyFunc(), вона буде містити значення 234. А ось ще приклад:

c = 5 + 5 * 2

Тут вираз це 5 + 5 * 2. Значення цього виразу не важко порахувати, воно дорівнює 15 (не 20 оскільки пріоритет множення вище). Можна було б написати й так:

c = MyFunc() - 219

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

Також необхідно відзначити значення дужок у вираженнях. Для зміни пріоритету операцій в Visual Basic використовують дужки. Приміром, модифікуємо вираз 5 + 5 * 2 на:

c = (5 + 5) * 2

Тепер значення цього виразу не 15, а 20!

Йдемо далі. Розглянемо інші, дуже розповсюджені вирази - вирази порівняння. Такі вирази повертають True або False, залежно від значення виразу, що вийшло. До таких виразів належать:

Dim bRes As Boolean ' змінна для зберігання результату

Dim a As Long

Dim b As Byte

Dim c As Long

a = 234 ' змінні для тесту

b = 5

c = 1000

bRes = c > b ' 1

bRes = c < b ' 2

bRes = a >= c ' 3

bRes = b <= 4 ' 4

bRes = b <= 5 ' 5

bRes = a <> b ' 6

bRes = Not (a = b) ' 7

Розглянемо кожний випадок докладно:

1. Тут, змінної типу Boolean - bRes присвоюється значення виразу (c > b). Visual Basic порівнює ці змінні, і дивиться, c > b? Якщо так, то значення цього вираження порівняння - True. Якщо ж ні, то False.

2. Те ж саме, тільки bRes буде містити значення False, тому що c більше b, а не менше, як зазначено у виразі.

3. Тут відбувається порівняння значень змінних a і c. У нашому випадку a = 234, c = 1000, значить не більше й не дорівнює (менше). bRes буде містити False.

4. b рівняється із числом 4. Згадаєте, адже 4 - це теж вираження, зі значенням 4! Оскільки b > 4, то bRes = False.

5. Тут також відбувається порівняння змінної b із числом, 5. Але цього разу одне з умов виконано, а саме b = 5! Значить bRes = True.

6. Очевидно, що b <> a. Стало бути bRes повинне бути дорівнює True!? Так, так воно і є.

7. Зверніть увагу на цей приклад. Після виконання цього рядка, bRes буде дорівнює True! Тут вираз Not (a = b) обчислюється в такий спосіб: спочатку Visual Basic порівнює значення a і b. Після того, як VB переконається в тім, що a <> b (тобто False), він обчислює вираз: Not (False). Оператор Not - це булевий оператор заперечення. Він інвертує значення. У цьому випадку з False виходить True. (на більше низькому рівні, можна додати, що оператор Not інвертує всі біти операнда, у цьому випадку, тому що False в VB - це 0, а True - FFFF, те значення виразу - True).

Оператори

В Visual Basic оператори бувають наступних типів:

· Арифметичні:

o ^ оператор зведення в ступінь.

o * оператор множення.

o / оператор ділення

o \ оператор цілочисленого ділення

o Mod оператор обчислення залишку від ділення

o + оператор додавання

o - оператор вирахування

· Порівняння:

o < менше

o > більше

o <= менше або дорівнює

o >= більше або дорівнює

o = дорівнює

o <> не дорівнює

· Конкатенації:

o + оператор конкатенації

o & оператор конкатенації

· Логічні:

o And оператор логічного множення

o Eqv оператор логічної еквівалентності

o Imp оператор логічної імплікації

o Not оператор логічного заперечення

o Or оператор логічного додавання

o Xor оператор логічного додавання, що виключає

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

Таблиця 6.1 Пріоритети в VB.

Арифметичні Порівняння Логічні
Зведення в ступінь(^) Дорівнює (=) Not
Заперечення (–) Нерівно (<>) And
Множення й ділення (*, /) Менше ніж (<) Or
Цілочислене ділення (\) Більше чим (>) Xor
Залишок від ділення (Mod) Менше або дорівнює (<=) Eqv
Додавання й вирахування (+,-) Більше або дорівнює (>=) Imp
Конкатенація (&) Задоволення масці (Like)  
  Належність до типу (Is)  

У цій таблиці зверху вниз показаний порядок проходження пріоритетів операторів Visual Basic. Зверху вниз пріоритет убуває. Оператори (* і /) мають однаковий пріоритет, і у виразі обчислюються ліворуч праворуч. Це ж стосується до операторів додавання й вирахування. Якщо у виразі зустрічаються оператори з різних категорій, то обчислюються вони в порядку стовпців ліворуч праворуч. Так спочатку арифметичні, потім оператори порівняння й лише потім логічні оператори.

Керуючі структури призначені для управління процесом виконання всіх інших операторів Visual Basic, що виконуються. Тут би хотілося помітити, що керуючі структури теж належать до операторів. Оператори, розглянуті вище використовуються у виразах. А оператори розглянуті тут призначаються для управління обчисленням цих виразів (у документаціях такі оператори називаються - Statement). Важливо розуміти різницю між цими операторами.

Умовний оператор If...End If

Цей оператор необхідний для прийняття рішень, потрібно чи виконувати ту або іншу чи дію ні. Іншими словами якщо Логічне_вираження істинно, те Оператор виконається. Якщо брехня, то виконання не відбудеться.

If Логічне_вираження Then Оператор

або складніше

If Логічне_вираження Then

Група_операторів

End If

У першому випадку оператор може бути тільки один. У другому скільки завгодно (у тому числі й один).

Приклад:

If (a = b) And (c <> d) Then

b = d

a = 20

End If

Дужки тут не обов'язкові, але вони підвищують читабельність коду.

Умовний оператор If...Else...ElseIf...End If

Така конструкція використається для більш складних розгалужень:

If Логічне_вираження 1 Then

Група_операторів

ElseIf Логічне_вираження 2 Then

Група_операторів

...

Else

Група_операторів

End If

Ця схема може бути й в укороченому вигляді If...Then...Else...End If. При цьому оператори після Else виконуються тільки в тому випадку, якщо жодна з умов не виконано.

Приклад:

If (a = b) Or (c <> d) Then

b = d

a = 20

Else

c = d

End If

Вираз c=d буде виконано тільки в тому випадку, якщо a<>b або c=d.

Умовний оператор Select Case...End Select

Конструкція Select Case "приймає рішення" на основі аналізу значення одного виразу. При цей це вираз вказується в рядку Select Case:

Select Case Аналізований_вираз

Case Значення№1

Група операторів

Case Значення№2

Група операторів

...

Case Значення№N

Група операторів

Case Else

Група операторів

End Select

Звичайно, аналізований вираз повинне повертати значення типу, сумісного з типом значень у рядку Case.

Приклад:

Залежно від значення змінної iTest, строкової змінної strResult присвоюються різні значення

Select Case iTest

Case 1

strResult = "iTest = 1"

Case 2, 3, 4

strResult = "iTest = 2, 3 або 4"

Case 5 To 9

strResult = "iTest від 5 до 9"

Case iTest < 0

strResult = "iTest менше 0"

Case Is > 9

strResult = "iTest більше 9"

Case Else

strResult = "iTest дорівнює 0"

End Select

Оператор циклу For...Next

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

For Лічильник_циклу = Старт To Стoп Step Крок

Група операторів

Next [Лічильник_циклу]

Роль лічильника циклу може грати тільки раніше оголошена змінна цілочисленого типу. Крок задає приросту лічильника циклу при кожному проході. За змовчанням значення кроку дорівнює 1. Після слова Next лічильник можна опустити.

Приклад:

У цьому прикладі всім елементам масиву iArray присвоюється значення 5.

Dim c As Integer

Dim iArray(10) As Integer

For c = 0 To 10

iArray(c) = 5

Next c

Оператор циклу For Each...Next

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

For Each Ім’яоб’єкту In Ім’яколекції

Операції над об'єктами

Next Ім’яоб’єкту

Приклад:

У цьому прикладі показано, як отримати дані із властивостей файлу

Dim a As String

On Error Resume Next 'ігноруємо порожні властивості

Dim dp As DocumentProperty

For Each dp In _

ActiveDocument.BuiltInDocumentProperties

a = dp.Name & "__" & dp.Value

Debug.Print a

Next dp

Me тут - поточна форма. Тобто не обов'язково використовувати повне ім'я форми для доступу до її властивостей. Наприклад, для закриття поточної форми, можна написати Me.Hide. (або Unload Me).

Оператор циклу Do While...Loop / Do...Loop While

Ці два різновиди циклу тісно взаємозалежні, і їх часто розглядають як один з базових видів циклу. Як ми вже відзначали, цикли For застосовують у тих випадках, коли кількість проходів і діапазон зміни лічильника циклу заздалегідь відомі. Цикли While призначені для ситуацій, коли кількість проходів циклу заздалегідь не відомо, але зате відома умова виходу із циклу. Синтаксис циклу While:

Do While Умова_виходу

Група операторів

Loop

Do

Група операторів

Loop While Умова_виходу

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

Do While 2 > 1

Debug.Print "Вічний цикл"

Loop

Якщо у вас випадково вийшов такий цикл, то вийти з нього можна при натисканні Ctrl+Break. Але це працює тільки в середовищі розробки.

Приклад:

Dim n As Integer

n = 100

Do While n >= 0

n = n – 1

Debug.Print n

Loop

Оператор циклу Do Until...Loop / Do...Loop Until

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

Приклад:

Dim n As Integer

n = 100

Do

n = n – 1

Debug.Print n

Loop Until n < 11

Вихід із циклу Exit For / Exit Do

За допомогою операторів Exit... можна здійснити достроковий вихід із циклу поза залежністю від значення, що має в цей момент умова виходу.

Приклад:

Dim n As Integer

n = 10

Do While n > 1

n = n – 1

Debug.Print n

If n = 5 Then Exit Do ' Якщо лічильник = 5, те

'виходимо із циклу

Loop

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

В Visual Basic, як і в багатьох інших мовах програмування, більшість програм створюється із блоків - процедур і функцій. Весь програмний код перебуває як би усередині цих процедур. Якщо виникає необхідність у рішенні якого-небудь завдання в будь-якім місці програми, то викликається процедура. В Visual Basic не можна ввести код між процедурами. Код завжди повинен перебувати усередині процедури.

Процедури:

Процедура - це якийсь блок коду, що буде виконуватися щораз при виклику цієї процедури. Кожна процедура починається зарезервованим словом Sub і закінчується End Sub. Макроси VBA також являють собою процедури.

Загальний синтаксис процедури:

[Private | Public | Friend] [Static] Sub name [(arglist)]

[тут якийсь код]

[Exit Sub]

[тут теж може бути якийсь код]

End Sub

Усе, що укладено у квадратні дужки - є необов'язковим. Оператор Exit Sub дозволяє достроково вийти із процедури. Іноді це дуже зручно. Слова Public, Private мають те ж значення, що й при оголошенні змінних.

arglist має такий вигляд:

[Optional] [ByVal | ByRef] [ParamArray] varname[( )]
[As type] [= defaultvalue]

Розглянемо приклад процедури, що буде виводити на екран повідомлення "Hello World!":

Private Sub ShowMessage()

MsgBox "Hello World!"

End Sub

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

MsgBox - це убудована функція Visual Basic, що виводить на екран вікно з повідомленням, заданим як параметр. Інші параметри необов'язкові (їх усього 5).

Для вводу даних із клавіатури можна використати убудовану функцію InputBox з повідомленням, виведеним у запиті, як параметр. Наприклад:

Message$=InputBox ("Введіть повідомлення")

Змінна Message$ одержить рядок, введений із клавіатури.

Як викликати процедуру? Для цього досить написати ім'я процедури:

ShowMessage

А можна й так:

Call ShowMessage' більш наочний варіант

Обидва цих варіанта абсолютно еквівалентні. Але для виклику процедур все-таки краще використовувати другий варіант.

Тепер давайте змінимо цю процедуру й додамо до неї параметр, значення якого буде виводитися функцією MsgBox (замість Hello World):

Private Sub ShowMessage(message As String)

MsgBox message

End Sub

Тепер при виклику процедури необхідно вказати параметр:

Call ShowMessage ("Наша перша процедура")

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

Давайте розглянемо докладніше що ж відбувається при виклику нашої процедури. Зустрівши рядок з викликом нашої процедури Visual Basic перевіряє, чи потрібні даній процедурі параметри. Переконавшись у тім, що потрібні (параметр message) він передає в процедуру рядок "Наша перша процедура". Фактично в процедурі відбувається присвоєння змінної message значення "Наша перша процедура". Ну а далі відбувається виклик функції MsgBox і вивід повідомлення на екран. Якщо кількість параметрів, переданих при виклику процедури не збіжиться з кількістю параметрів в оголошенні процедури - Visual Basic згенерує помилку.

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

Функції:

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

[Public | Private | Friend] [Static] Function ім’яфункції [(arglist)] [As type]

[тут якийсь код]

[ім’яфункції = вираз]

[Exit Function]

[тут теж може бути якийсь код]

[ім’яфункції = вираз]

End Function

Що значить "буде пове







Последнее изменение этой страницы: 2017-01-19; Нарушение авторского права страницы

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 3.233.215.196 (0.07 с.)