Для констант і типів ключові слова Const й Type однозначно визначають описуваний об'єкт. Для змінних ключові слова можуть бути різними. Помітимо, що для змінних рівня модуля не доцільно використовувати ключове слово Dim, краще використовувати специфікатори Public або Private, що явно вказують область дії змінної.
Const має на увазі, що оголошена величина залишається незмінною. Синтаксис Const Ім’яСталоїВеличини = Значення
Змінні, оголошені за допомогою службового слова Global, можуть адресуватися у будь-якому місці коду програми.
Global Ім’яГлобальноїВеличини As ТипДаних Розділ Declare
Цей розділ з'являється в тих випадках, коли модулі проекту використовують бібліотеки, що приєднують динамічно, - DLL. Якщо DLL має бібліотеку типів TypeLib і вона доступна проекту, то немає необхідності описувати компоненти бібліотеки, вони будуть знайдені автоматично. Але якщо TypeLib недоступна або не визначена, то в цій ситуації кожна з функцій і процедур бібліотеки, яка викликається в модулі, повинна бути попередньо описана спеціальним оператором Declare. Розглянемо його синтаксис:
[Public | Private] Declare {Sub | Function} ім'я Lib "ім'я_бібліотеки" _
[Alias "псевдонім"] [([параметри])] [As що повертає_тип]
У ньому указується ім'я бібліотеки, ім'я процедури або функції, можливий псевдонім, параметри й значення функцій, яке повертається.
Є кілька простих правил, які варто виконувати, щоб бути цивілізованим програмістом. Правила, про які ми зараз поговоримо, стосуються оформлення тексту програм. Наведемо основні правила:
· використовуйте коментарі,
· дотримуйтесь правил іменування,
· структуруйте текст,
· будуйте програми з модулів "піднімального" розміру.
Правило написання імен змінних полягає в такому: ім'я повинне відбивати основний зміст і складатися з одного або декількох разом написаних слів, кожне з яких починається з великої букви.
Розроблювачі від Microsoft рекомендують дотримуватися більш суворих правил. Ім'я повинне відбивати не тільки зміст, але й тип змінної, область дії. Тому ім'я повинне складатися із префікса й власного імені. Префікс також є складовим, дві його частини відбивають область дії й тип змінної.
VBA - операторна мова. Це означає, що її програми (модулі) представляють послідовності операторів. Групу декларативних операторів VBA, з якими працює програма (типів, змінних, констант, об'єктів додатків й ін.), ми вже розглянули. Оператори іншої групи забезпечують присвоєння й зміну значень цих об'єктів, оператори третьої групи керують ходом обчислень, четвертої - роботою з каталогами й файлами й т.д.
При записі тексту програм для спрощення читання, налагодження й модифікації програми кожен оператор слід розміщувати в окремому рядку тексту. Дотримуйтесь правила: "Один оператор - один рядок". Але дозволяється розміщувати на рядку й кілька операторів, на відміну від загальноприйнятого символу поділу операторів "крапки з комою", в VBA символом поділу двох операторів в одному рядку служить двокрапка. Помітьте, деякі оператори, наприклад, оператор If, можуть стояти лише на першому місці в рядку. І із цієї причини кожен оператор, як правило, варто починати з нового рядка, лише іноді, розумно, групу операторів присвоювання розміщувати в одному рядку. Частіше виникає інша ситуація, - оператор занадто довгий і його текст не видний повністю на екрані дисплея, що затруднює читання й розуміння програми. У цьому випадку оператор варто продовжити в одній або декількох рядках. Щоб продовжити (перенести) оператор на наступний рядок, використовується пара символів пробіл-підкреслення "_". Наприклад, MyAddress = "будинок: " & Number & "вулиця: " & Street _ & "місто: " & City
Перед оператором у рядку може стояти мітка - послідовність символів, що починається з букви й кінчається двокрапкою ":". Мітки можна розміщати й в окремих рядках перед тими операторами, які вони повинні позначати. Вони потрібні для операторів переходу типу GoTo, використання яких вважається "дурним тоном" у структурному програмуванні. Але іноді без міток і переходів на них обійтися важко - зокрема, для вказівки входів в оброблювачі помилок у деяких процедурах.
Коментарі на виконання програми не впливають, але необхідні як ознака "гарного стилю". Офісні програми використовуються багаторазово й не раз модернізуються в процесі свого життя. Ви можете заощадити на коментарях і написати, налагодити невеликий модуль без них. Але вже через тиждень ніхто, у тому числі й автор, не зможе зрозуміти його дію й модифікувати потрібним способом. Коментар у VBA починається апострофом (') і включає будь-який текст, розміщений правіше в рядку. Звичайно в коментарях описують завдання, які розв'язуються модулями, функції, які виконуються процедурами, зміст основних змінних (якщо він неясний з імен), алгоритми роботи процедур. Корисно також коментувати оператори викликів зовнішніх для даного модуля процедур, пояснюючи їхні дії.
Оператори присвоювання - основний засіб зміни стану програми (значень змінних і властивостей об'єктів). У VBA кілька видів операторів присвоювання. Найпоширеніший серед них Оператор Let. За допомогою цього оператора відбувається "звичайне" присвоєння значення вирази змінної або властивості.
Синтаксис: [Let] змінна = вирази
Ключове слово Let, як правило, опускається. Змінна є ім'ям змінної або властивості; вираз задає значення, що привласнюється змінній. Його тип повинен відповідати типу змінної.
Приклади:
Public Sub Assign1()
Dim MyStr As String, MyInt As Integer
Let MyStr = "Доброго дня!" ' Із ключовим словом Let MyInt = 5 ' Без нього. Звичайний варіант.
Debug.Print MyStr, MyInt
End Sub
Цикли із можливою перевіркою умови на початку, наприкінці й у середині роботи оператора, звичайний оператор If й оператор розбору випадків Case - всі ці засоби дозволяють організувати процес обчислень надійно й ефективно відповідно до кращих традицій програмування.
Це загальноприйнятий у мовах програмування оператор керування обчисленнями дозволяє вибирати й виконувати дії залежно від істинності деякої умови.
Є два варіанти синтаксису: в один рядок й у формі блоку. У першому випадку він має вигляд:
If умова Then [оператори1] [Else оператори2 ]
У другому випадку оператор розміщений на декількох рядках:
If умова Then
[оператори] [ElseIf умова-n Then [оператори-n]...
[Else
[ІншіОператори]]
End If
Тут умова обов'язково в обох варіантах. Вона може бути числовим або строковим виразом зі значеннями True або False (Null трактується як False). Як умову можна використовувати й вирази виду TypeOf Ім’яОб’єкта Is ТипОб’єкта, де Ім’яОб’єкта посилання на об'єкт, а ТипОб’єкта - довільний коректний тип об'єкта. Оператори1 й оператори2 - це послідовності з одного або декількох розділених двокрапкою операторів. Принаймні, одна із цих послідовностей повинна бути непустою. Якщо умова істинна (True), виконується послідовність оператора1, неправдива (False) - оператора2. Закриваючий оператор End If необхідний.
Цей оператор робить розгляд випадків, і залежно від значення аналізованого виразу вибирає й виконує одну з послідовностей операторів.
Синтаксис.
Select Case Тест^-тест-вираз-тест
[Case ПерелікВиразів-n
[оператори-n]]
[Case Else
[ІншіОператори]]
End Select
Вираз-тест повинен бути присутнім обов'язково. Воно може бути довільним виразом із числовим або строковим значенням. ПерелікВиразів-n повинен бути присутнім у рядку, що починається ключовим словом Case (Випадок). Цикл For Next
Дозволяє повторювати групу операторів задане число раз.
Синтаксис:
For лічильник_циклу = початок To кінець [Step крок]
тіло циклу
Next [лічильник_циклу]
Тут лічильник_циклу - це числова змінна. На початку виконання циклу вона набуває значення, що задає числовим виразом початок (змінна лічильник_циклу не може мати тип Boolean або бути елементом масиву). Числовий вираз кінець задає заключне значення лічильника циклу. Воно обчислюється до початку виконання тіла циклу й не міняється, навіть якщо вхідні в нього змінні змінюють у тілі циклу свої значення. Числовий вираз крок необов'язковий. Його значення також обчислюється на початку циклу й додається до лічильника циклу щоразу, коли завершується виконання тіла циклу й обчислення досягає рядка Next [лічильник_циклу]. Якщо крок циклу явно не зазначений, за замовчуванням він дорівнює 1. Тіло циклу - це послідовність операторів, яка буде виконана задане число раз. При якому значенні змінної лічильник_циклу відбувається завершення циклу, залежить від знака параметра крок. Якщо крок додатний, цикл завершиться, коли вперше виконається умова: лічильник_циклу > кінець.
Якщо крок циклу від’ємний, умова його завершення: лічильник_циклу < кінець.
Ця умова перевіряється перед початком виконання циклу, а потім - після кожного додатка кроку до лічильника циклу в операторі Next. Якщо воно виконане, керування передається на оператор, що випливає за Next, немає - виконуються оператори з тіла циклу. Завершити цикл For … Next можна й за допомогою оператора Exit For. Такі оператори можуть бути розміщені в тих місцях тіла циклу, де потрібно з нього вийти, не чекаючи виконання умови завершення.
Приклад.
У нашому прикладі три вкладених цикли For … Next використовуються для обчислення добутку двох цілочислених матриць з випадкових чисел. Потім результуюча матриця перевіряється на наявність у ній нульового значення: