- •1. Теоретичні питання 76
- •2. Тести 76
- •3. Практичні завдання 76
- •1. Теоретичні питання 90
- •2. Тести 90
- •3. Практичні завдання 90
- •1. Теоретичні питання 103
- •2. Тести 103
- •3. Практичні завдання 103
- •Алгоритми. Алгоритмічна мова
- •1. Алгоритм і його властивості
- •2. Поняття алгоритму
- •3. Схеми алгоритмів
- •4. Графічне зображення різних видів обчислювальних процесів
- •4.1. Графічне зображення лінійних обчислювальних процесів
- •4.2. Графічне зображення розгалужених обчислювальних процесів
- •4.3. Графічне зображення циклічних обчислювальних процесів
- •1. Створення і управління макросами
- •Запис макросу
- •Зміна макросу
- •Перегляд і зміна макросів
- •Управління макросами
- •Безпека макросів
- •2. Способи виконання макросу
- •Запуск макросу на виконання в Microsoft Excel
- •Запуск макросу на виконання з редактору Visual Basic
- •Основні елементи мови Visual Basic
- •1. Організація програми на мові vb для Excel
- •2.Створення і вживання процедур
- •4. Типи даних
- •5. Зона дії змінних і процедур
- •6. Масиви
- •7. Константи
- •8. Перетворення типів
- •12.Операції vb
- •13.Використання функцій vb
- •14.Строкові функції
- •15.Функції дати і часу
- •16.1.Методи об'єктів
- •16.2. Контейнери і набори об'єктів
- •17.Використання властивостей, що характеризують активність
- •18.Використання властивостей, що характеризують вміст
- •19. Властивості форматування
- •20.Методи роботи з таблицями
- •22. Створення і вживання функцій
- •23.1.Логічні вирази
- •23.2.Структура оператора if - then
- •24.Структура оператора Select Case
- •25. Неструктурований перехід
- •26.1.Циклічна структура for – next
- •26.2.Оператор for each - next (для кожного - наступного)
- •27. Логічні цикли
- •27.1.Вживання циклу do-loop
- •1. Вживання функції MsgBox()
- •1.1. Створення простого вікна повідомлення
- •1.2. Додавання командних кнопок у вікно повідомлення для створення діалогового вікна
- •1.3. Набуття значень від функції MsgBox()
- •2. Вживання функції InputBox()
- •3. Вживання діалогових вікон інших типів
- •4. Виклик діалогових вікон додатка
- •Р исунок 1. Нова, чиста сторінка діалогу Excel
- •29. Розташування об'єктів форми в бланк (вікно діалогу)
- •29.1.Об'єкт "Командна кнопка"
- •29.3.Об'єкт "Вікно редагування'
- •29.4.Об'єкт "Групове вікно"
- •29.5.Об'єкт "Контрольний індикатор"
- •29.6.Об'єкт "Кнопка вибору"
- •29.7.Об'єкт "Вікно списку"
- •29.8.Об'єкт "Випадаюче вікно"
- •29.9.Комбінований об'єкт "Вікно список-редагування"
- •29.10.Комбінований об'єкт "Вікно випадаючий список-редагування"
- •29.11.Об'єкт "Лінійка прокрутки"
- •29.12.Об'єкт "Спіннер"
- •30. Підключення процедур до об'єктів діалогового вікна користувача
- •31. Відображення діалогового вікна користувача
- •32.Файли послідовного доступу
- •32.1.Читання і запис послідовних файлів
- •32.2.Відкриття файлу
- •32.3.Закриття файлу
- •32.4. Запис у файл за допомогою оператора Print
- •32.5.Запис у файл оператором Write
- •32.6.Читання з файлу
- •33.Запис даних у файл довільного доступу
- •33.1.Читання і запис файлів довільного доступу
- •33.2.Відкриття файлу
- •33.3. Закриття файлу довільного доступу
- •33.4. Визначення структури та довжини запису
- •33.5.Запис даних у файл
- •33.6. З читування даних з файлу
5. Зона дії змінних і процедур
Всі процедури, функції, змінні і константи в VBA мають свою область застосування. Це означає, що вони можуть використовуватися лише у визначеному місці програмного коду — саме там, де вони описані. Наприклад, якщо змінна А описана за допомогою оператора Dim в телі процедури з ім'ям Proc1, саме ця процедура і є її зоною дії. Таким чином, якщо є інша процедура Ргос2, ви не можете використовувати в ній цю ж змінну. Якщо ви спробуєте зробити це, то або отримаєте повідомлення про помилку із-за використання неописаної змінної (в тому випадку, якщо використовується згадуваний раніше оператор Option Explicit), або просто отримаєте іншу змінну — з тим же самим ім'ям, але ніяк не пов'язану з однойменною змінною з першої процедури.
Почнемо з визначення зони дії змінних. У якому місці програми і як саме описана змінна, визначає зону її дії і те, як довго вона "живе" в пам'яті і зберігає привласнене нею значення. Є три різні рівні при визначенні зони дії змінних:
рівень процедури;
рівень модуля;
рівень проекту.
Схема видимості змінних відповідно до об'єктно-орієнтованої моделі контейнерів. Змінні, оголошені в зовнішньому контейнері, доступні процедурам, що входять в цей контейнер (рис1.).
Аби визначити змінну на рівні процедури, її опис поміщається в тіло даної процедури, і тоді це буде локальна змінна даної процедури.
Аби визначити змінну на рівні модуля і зробити її тим самим доступною для спільного використання у всіх процедурах даного модуля, слідує розмістити її опис в секції оголошень модуля — перед текстом яких-небудь процедур або функцій. При цьому може використовуватися і явний опис області дії (визначення): замість ключового слова Dim в цьому випадку використовується ключове слово Private. Немає жодної різниці в тому, який з цих описувачів використовується.
Нарешті, аби описати змінну на рівні проекту, необхідно розташувати її опис в секції оголошень одного з модулів проекту і при цьому обов’язково повинно використовуватися ключове слово Public. Описані таким чином зміні можуть використовуватися в будь-якому модулі проекту.
( Замечание )
Все сказане раніше відноситься і до опису, і до визначення зони дії констант, а також масивів.
Для змінних є ще один спосіб їх опису, що не змінює їх рівня, але що дозволяє зберегти значення змінної, описаної на рівні процедури, після завершення роботи даної процедури. Для цього слід використовувати описувач static, тим самим визначаючи її як статичну змінну. Така зміна зберігає виділене нею місце в пам'яті і своє значення навіть після завершення процедури, в якій вона була описана і використана.
Проте статична змінна не може бути використана в інших процедурах. Змінюється лише час її життя, але не зона дії. Якщо здійсниться повторний виклик тієї ж самої процедури, в якій була описана статична змінна, то ця змінна збереже своє колишнє значення, яке вона мала у момент завершення роботи цієї процедури при попередньому виклику. Звичайні, не статичні, змінні всякий раз ініціалізувалися заново і набувають при вході в процедуру порожніх значень.
Перейдемо до обговорення зони дії процедур і функцій. Процедури і функції мають лише два рівні зони дії: рівень модуля і рівень проекту. За умовчанням використовується рівень проекту. Таким чином, процедура або функція може бути викликана будь-якою іншою процедурою або функцією в цьому проекті. При описі процедур і функцій на рівні проекту може також використовуватися необов'язкове ключове слово Public. Жодної дії на процедуру наявність або відсутність цього слова не надає.
Якщо потрібно описати процедуру, що використовується лише на рівні модуля, то для цього застосовується ключове слово Private. Врахуйте, що таке опис не лише звужує зону дії для процедури, але і забороняє її використання як самостійної процедури — її можна викликати лише з іншої процедури.
Нарешті, при описі процедур або функцій може використовуватися і ключове слово static. Воно ніяк не впливає на зону дії процедури, але впливає на всі змінні, описані усередині цієї процедури або функції. В цьому випадку всі локальні змінні отримують статус static і тим самим залишаються в пам'яті після завершення такої процедури і при повторному її виклику зберігають свої колишні значення
рис. 1 Схема зони дії змінних
Public – оголошення глобальних зміних і змінна може використовуватися в будь-якій внутрішній процедурі програми.
Змінна var2, var5, var4 визначена лише для процедури 2, 5, 4 відповідно, var3 – у всіх процедурах Модуля 2, var1 - у всіх процедурах Модуля 1, var визначена у всіх модулях і процедурах (рівень проекту).
Розглянемо приклад модуля, що починається таким чином:
Public A1 As String ‘ рівень проекту, змінна А1 символьного типу
Private A2 As Integer ‘ рівень модуля, змінна А2 типу – коротке ціле
Dim A3 As Single ‘ рівень модуля, змінна А2 типу – коротке дійсне число з плаваючою крапкою
Sub Proc1( ) ‘ оголошення початку процедури Proc1
Dim A4 As Integer ‘ рівень процедури, змінна А4 типу – коротке ціле
Static A5 As Integer ‘ рівень модуля, змінна А5 типу – коротке ціле
A1 = "Текстовая строка 1" ‘ текстове значення змінної А1
A2 = 2 ‘ присвоєння цілого числа (2) змінної А2
A3 = 3.14 ‘ присвоєння дійсного з плаваючою крапкою числа (3.14) змінної А3
A4 = A4 + 4 ‘ розрахунок значення змінної А4
A5 = A5 + 5 ‘ розрахунок значення змінної А5
MsgBox A4 ‘ вивід значення змінної А4 у вікні повідомлення
MsgBox A5 ‘ вивід значення змінної А5 у вікні повідомлення
Debug.Print "Proc1:", "A4="; A4, "A5="; A5 ‘вивід значення змінної А4,А5 з коментарями(текстом) у вікні відладки
End Sub ‘ оголошення кінця процедури Proc1
Sub Proc2( ) ‘ оголошення початку процедури Proc2
Proc1 ‘ виклик процедури Proc1з поточного модуля
MsgBox Al ‘ вивід значення змінної А4 у вікні повідомлення
MsgBox A2 ‘ вивід значення змінної А4 у вікні повідомлення
MsgBox A3 ‘ вивід значення змінної А4 у вікні повідомлення
MsgBox A4 ‘ вивід значення змінної А4 у вікні повідомлення
MsgBox A5 ‘ вивід значення змінної А4 у вікні повідомлення
Debug.Print "1/Proc2:", "A1="; A1, "A2="; A2, "A3="; A3, "A4="; A4, "A5="; A5
‘вивід значення змінних А1, А2, А3, А4 та А5 з коментарями(текстом) у вікні відладки
Proc1 ‘ виклик процедури Proc1з поточного модуля
Debug.Print "2/Proc2:", "A1="; A1, "A2="; A2, "A3="; A3, "A4="; A4, "A5="; A5
‘вивід значення змінних А1, А2, А3, А4 та А5 з коментарями(текстом) у вікні відладки
End Sub ‘ оголошення кінця процедури Proc2
В даному прикладі змінна Al визначена на рівні всього проекту (використано ключове слово Public), змінні А2 і A3 визначені на рівні модуля, зміна А4 — лише на рівні процедури Procl, а змінна А5 хоча і визначена у телі процедури Procl, але описана як статична змінна.
При запуску на виконання процедури Ргос2 станеться наступне: з цієї процедури буде у свою чергу викликана процедура Procl, яка привласнить значення всім п'яти змінним А1, А2, A3, А4 і А5, а потім покаже поточні значення змінних А4 і А5 у вікні повідомлення (MsgBox) та вікні відладки рис.1, яке включається у VBA View → Immediate Window (Debug.Print).
Proc1: A4= 4 A5= 5
1/Proc2: A1= Текстовая строка 1 A2= 2 A3= 3,14 A4= A5=
Proc1: A4= 4 A5= 10
2/Proc2: A1= Текстовая строка 1 A2= 2 A3= 3,14 A4= A5=
Рисунок 1. Результат роботи процедури Proc2, наведеного приклада програми
Після завершення цієї процедури будуть виведені поточні значення змінних А1 — А5 з процедури Ргос2. При цьому виявиться, що змінні А1 — А3 зберегли свої значення, оскільки вони описані на рівні модуля, а змінні А4 і А5 набувають порожніх значень, оскільки зоною дії цих змінних є процедури, в яких вони використовуються. Жодні зміни цих змінних усередині однієї з процедур не мають відношення до аналогічних змінних з другої процедури — насправді це різні змінні, просто для них використовуються співпадаючі імена.
Потім відбувається ще один виклик процедури Procl, і вона знов починає змінювати і виводити на екран значення змінних А4 і А5. При цьому змінна А4 знов набуде значення 4, оскільки при новому виклику процедури для цієї змінної буде заново виділена пам'ять, і вона ініціалізує порожнім значенням. На відміну від А4, змінна А5, описана як статична, збереже своє колишнє значення від попереднього виклику цієї процедури, в результаті її значення при повторному виклику опиниться рівним 10.