Роздрукувати сторінку
Главная \ Методичні вказівки \ Методичні вказівки \ 1341 Теоретична довідка до ПР 23 на тему VBA, Запис макросів у середовищі MS Word та MS Excel

Теоретична довідка до ПР 23 на тему VBA, Запис макросів у середовищі MS Word та MS Excel

« Назад

Теоретична довідка до ПР №23

VBA — це мова програмування, вбудована в багатьох окремих програмах та прикладних пакетах — від додатків Microsoft Office (включаючи Microsoft Project та Microsoft Visio) і до таких потужних пакетів, як AutoCAD, CorelDraw та Adobe Creative Suite, не говорячи вже про численні спеціалізовані додатки, призначені для управління виробничими процесами, обліку фінансовими ресурсами чи  інформаційної підтримки клієнтів.

VBA містить інтегроване середовище, що містить набір вікон для спрощення проектування, відладки та тестування програм. Інтегроване середовище називається редактор Visual Basic. Цей редактор встановлений у додатках за замовчуванням, але у Office 2010 його потрібно включити у стрічку.

Всі додатки Office 2010 використовують стрічку. Однією із вкладинок на стрічці є вкладинка Разработчик, на якій можно викликати редактор Visual Basic та інші інструменти розробника. Оскільки в Office 2010 вкладинка Разработчик не показана за замовчуванням, то необхідно вивести її на екран, виконавши наступну процедуру.

На вкладниці  Файл вибрати Параметры і відкрити  діалогове вікно Параметры. Клацнути Настройка ленты в лівій частині діалогового вікна. У розділі  Выбрать команды из, розміщеному зліва у вікні, вибрати Популярные команды. У розділі Настройка ленты, який знаходиться з права у діалоговому вікні, вибрати Основные вкладки у списку, що розкривається, а потім встановити прапорець  Разработчик та натиснути кнопку ОК.

Після включення у стрічку вкладинки Разработчик можна легко знайти кнопки Visual Basic та Макросы.

При розв’язуванні багатьох задач часто виконують одну і ту ж послідовність операцій. Але в Microsoft Office 2010 замість багаторазового повторення однієї і тієї ж послідовності дій можна написати макрос (Macro), який буде автоматично виконувати потрібну послідовність дій багаторазово. Для багатьох VBA-додатків— серед яких Microsoft Word, Excel, Assess, PowerPoint і т.д. — макроси можна створювати як за допомогою мови Visual Basic for Application, так і за допомогою спеціальних функцій Microsoft Office 2010, що використовуються для інтерактивного  запису макросів (найпростіший спосіб за допомогою засобу MacroRecorder).

Щоб записати макрос за допомогою спеціального засобу MacroRecorder, наприклад у середовищі Microsoft Excel 2010, треба на стрічці вибрати вкладинку Вид (клацнути на ній лівою кнопкою мишки). Потім у групі Макросы клацнути на кнопці Макросы і вибрати команду Запись макроса — як показано на рис.2.

Рис. 2. Стрічка додатку Microsoft Excel 2010 з відкритою вкладинкою Вид, на якій у групі Макроси знаходиться команда меню Запись макроса

У результаті цих дій на екрані розкриється діалогове вікно Запись макроса (рис.3).

Рис. 3. Діалогове вікно Запись макроса в Microsoft Excel 2010

Діалогове вікно Запись макроса в різних додатках Microsoft Office 2010 — Word, Excel чи PowerPoint — має різний вид, але правила запису нового макросу для всіх додатків одинакові, а саме:

■ ім’я макроса починається з букви, але всередині може містити цифри та символ підкреслення;

■ ім’я макроса не може містити пропуски чи спеціальні символи;

■ максимальна довжина імені макроса 80 символів.

Наприклад:  Підсумок_по_рядках,  ПідсумокПоРядках.

В залежності від додатку, в якому створюють макрос (редактор Visual Basic, Word, Excel), діалогове вікно Запись макроса може містити різні поля та опції — наприклад, поле опису макроса, поле для визначення місця зберігання тексту макроса, призначену макросу комбинацію клавіш для його виклику і т.д.

Як видно з рис. 3, у діалоговому вікні Запись макроса у додатку Excel 2010 є поле Сочетание клавиш, у якому можна вказати бажану комбінацію клавіш, яка буде використовуватися для швидкого запуску даного макроса (комбінація клавіш <Ctrl+клавіша>).

У додатку Word у діалоговому вікні Запись макроса (рис.4), на відміну від Excel, у групі Назначить макрос є ще дві додаткові кнопки: кнопке  і клавишам. Ці кнопки дозволяють або присвоїти функцію виклику макроса новій кнопці на панелі інструментів, або призначити для нього деяку комбінацію клавіш швидкого виклику. Після клацання на будь-якій з цих кнопок розкриється ще одне діалогове вікно, у якому необхідно буде виконати відповідні призначення.

Рис. 4. Діалогове вікно Запись макроса у Microsoft Word 2010

У всіх додатках Microsoft Office у діалоговому вікні Запись макроса є і деякі спільні елементи:

■ Поле Имя макроса — тут вказують ім’я нового макроса. За замовчуванням VBA вказує в це поле значення Макрос1.

■ Поле Описание — тут записують текст-коментар про призначення данного макроса. За замовчуванням VBA заповнює це поле інформацією про те, де і ким був створений даний макрос (дата запису макроса та ім’я користувача).

■ Список Макрос доступен для — містить перелік тих документів, в яких даний макрос може бути збереженим; слід вибрати зі списку документ, у якому буде збережено новий макрос. У Word 2010 макроси можуть зберігатися тільки у файлах документа формату.docm або у файлах шаблонів документів формату .dotm. Кріме того, макрос можна зберігати у документі або шаблоні формату Word 97-2003 (.doc або .dot). У Excel 2010 макроси можна зберігати у робочій книзі формату .xlsm або .xlsb, у шаблоні формату .xltm, а також у документах формату Excel 97-2003 (.xls).

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

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

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

1) Вибрати чистий аркуш з виділеною за замовчуванням клітинкою А1.

2) Вибрати на стрічці додатку вкладинку Вид і у групі Макроси вибрати вказівку Запись макроса.

3) У діалоговому вікні Запись макроса ввести ім’я, що буде присвоєно новому макросу, — Півріччя1. У полі Сочетание клавиш ввести символ ф, тоді в подальшому натиснення комбінації клавіш <Ctrl+ф> буде викликати запуск даного макросу.

4) У полі Сохранить в   вибрати значення  Эта книга для збереження створеного макроса у активній книзі.

5) Після заповнення всіх полів у діалоговому вікні Запись макроса клацнути на кнопці ОК. Це початок процесу запису.

6) Клацнути на клітинці В1 та ввести в шість сусідніх клітинок назви місяців, як показано на рис.5.:

Рис. 5. Введення значень у клітинки при створенні макросу

7) Тепер відформатувати введені значення. Виділити клітинки B1:G1, перейти на стрічці на вкладнику Главная і у групі Шрифт клацнути на кнопках  і . Потім клацнути на клітинці В2 і зупинити запис макросу, для цього відкрити на стрічці вкладинку Вид і вибрати у групі Макроси команду Остановить запись.

8) Зберегти книгу під іменем Книга1.xlsm.

9) Виконати  створений макрос.

Приклад 2. Створення макросу, що здійснює зміну кольору фону документа MS Word відповідно до введених значень кольорів:

1) Запустити Microsoft Word;

2) Створити новий пустий  документ;

3) клацнути на стрічці вкладинку Разработчик;

4) натиснути кнопку  Mакросы  і вибрати  в полі Макросы из    Normal.dotm (общего шаблона);

5) ввести ім’я ChangeColor і натиснути кнопку Создать.

В редакторі Visual Basic з’явиться наступний фрагмент коду:

Sub ChangeColor()'

' ChangeColor Макрос''

End Sub

6) Змінити код, щоб він мав такий вид:

Sub ChangeColor()'

' ChangeColor Макрос'

Dim intRed As Integer

Dim intGreen As Integer

Dim intBlue As Integer

intRed = InputBox("Значення червоного? (0-255)")

intGreen = InputBox("Значення зеленого? (0-255)")

intBlue = InputBox("Значення синього? (0-255)")

ActiveWindow.View = wdWebView

With ActiveDocument.Background.Fill

.Visible = msoTrue

.ForeColor.RGB = RGB(intRed, intGreen, intBlue)

End With

MsgBox "Колір фону документа тепер RGB(" & intRed & ", " & intGreen & ", " & intBlue & ")."

End Sub

7) В меню View (Вид) вибрати команду Microsoft Word;

8) Ввести  в документі деякий текст, щоб бачити різницю між  кольором фону і текстом;

9) Виконати макрос ChangeColor;

10) У діалоговому вікні тричі ввести ціле число в діапазоні від  0 до 255 (для значень червоного, зеленого і синього),  кожного разу натискуючи кнопку ОК.

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

Приклад 3. Зміна кольору тексту документа Microsoft Word відповідно до введених значень кольорів.

1) клацнути вкладинку Разработчик на стрічці;

2) натиснути кнопку  Mакроси, виділити ім’я  ChangeColor і натиснути кнопку Изменить.

В редакторі Visual Basic з’явиться фрагмент коду з попереднього Прикладу:

3) Змінити код, щоб він набув такого виду:

Sub ChangeColor()'

' ChangeColor Макрос'

Dim intRed As Integer

Dim intGreen As Integer

Dim intBlue As Integer

intRed = InputBox("Значення червоного? (0-255)")

intGreen = InputBox("Значення зеленого? (0-255)")

intBlue = InputBox("Значення синього? (0-255)")

ActiveWindow.View = wdWebView

With ActiveDocument

.Select

.Range.Font.Color = RGB(intRed, intGreen, intBlue)

End With

MsgBox "Колір тексту документа тепер RGB(" & intRed & ", " & intGreen & ", " & intBlue & ")."

End Sub

4) Виконати макрос ChangeColor;

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

Код макросів та його  редагування

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

Відредагувати чи переглянути текст записаного макроса можна за допомогою команди Макросы в меню кнопки Макросы групи Макросы на вкладинці Вид додатку або команди меню редактора VBA Tools→Macros (Сервис→Макросы). В результаті на екран буде виведено діалогове вікно Макрос, показане на рис. 6.

Вибрати зі  списку ім’я макросу і клацнути на кнопці Изменить. На екрані відкриється вікно редактора VBA з програмним кодом вибраного макросу. У цьому вікні можна дописувати, видаляти, копіювати, змінювати, вирізати чи вставляти будь-які оператори мовою VBA, використовуючи команди меню Edit редактора VBA. Для зберігання програмного коду відредагованого макросу вибрати команду меню File→Save Имя_Документа (Файл^Сохранить в...) редактора VBA або клацнути на кнопці Save Имя_Документа (Сохранить в...) на панелі інструментів Edit (рис. 7).

Для виконання макросу у будь-якому додатку Microsoft Office 2010 (Word, Excel чи PowerPoint) його необхідно спочатку вибрати зі списку і натиснути кнопку Выполнить (Run), або використати  визначену комбінацію клавіш чи кнопку панелі швидкого доступу.

Проблеми безпеки

Для захисту користувачів Office 2010 від вірусів та шкідливих макросів неможна зберігати код макросів у стандартному документі Office 2010 із стандартним розширенням файлу. Його слід зберігати у файлі з особливим розширенням. Наприклад, неможна зберігати макроси у стандартному документі Word 2010 с розширенням DOCX; замість нього використовується спеціальний документ Word 2010 з використанням макросів з розширенням DOCM.

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

Можна вказати спеціальні папки, в яких будуть виконуватися макроси, створюючи надійні розміщення, надійні документи або надійних видавців. Найдинамічніший спосіб — використовувати надійних видавців, які працюють з документами з цифровими підписами, розповсюдженими користувачами. Для одержання додаткових відомостей про параметри безпеки в даному додатку Office 2010 у діалоговому вікні Параметри клацнути  Центр управления безопасностью та вибрати Настройки центра управления безопасностью.

Теоретична довідка до ПР №24 Середовище VBA

Редактор Visual Basic, вбудований у більшість програм Microsoft Office, це середовище  для створення, редагування макросів Office та управління ними, створення користувацьких вікон та для розв’язування інших задач, пов’язаних з опрацюванням програм написаних мовою VBA.

Вихідний код макросу зберігається у спеціальній частині файлу даних, яка називається модулем. Файл документа відповідного типу будь-якого з VBA-додатків може містити один або декілька модулів чи не містити їх взагалі. Модулям, збереженим у документах Word, за замовчуванням присвоюється загальна назва Project (проект), а в документах Excel — VBAProject.

Щоб переглянути збережені модулі необхідно запустити редактор VBA. Для цього на стрічці вибрати вкладинку Разработчик і у групі Код клацнути на кнопці Visual Basic або натиснути комбінацію клавіш <Alt+Fll>.  Загальний вигляд вікна редактора VBA подано на рис.8:

Вікно має стандартну структуру: рядок меню, панелі інструментів, робоча область та рядок стану.

Меню File (Файл) містить команди, необхідні для збереження змін у проекті VBA та виведення на екран чи на друк вихідного коду макросів.

Меню Edit (Правка) містить команди, призначені для управління вихідним кодом макроса у вікні Code, а також об’єктами у формах.

Меню View (Вид) містить  команди для відображення на екрані різних вікон редактора VBA.

Команди меню Insert (Вставка) дозволяють додавати у проект різні об’єкти — процедури, модулі, форми, класи та ін.

Меню Format (Формат) містить  команди для створення користувацьких діалогових вікон. Команди цього меню дозволяють вирівнювати об’єкти у формі, змінювати розміри та зовнішній вигляд елементів управління, а також виконувати багато інших операцій.

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

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

Меню Tools (Сервис) містит , команди для вибору макроса або для одержання доступу до зовнішніх бібліотек макросів. За допомогою інших команд цього меню можна одержати доступ до діалогового вікна Option (Параметри) редактора VBA та вікна властивостей проекта VBA.

Меню Add-lns містить  всього одну команду — Add-In Manager, яка виводить на екран діалогове вікно Add-In Manager, у якому можна завантажувати, вивантажувати, реєструвати та визначати поведінку програм-доповнень (надбудов).

Меню Window (Окно) містять команди ідентичні командам будь-яких інших додатків Windows.

 Меню Help (Справка) команду для доступу до довідкової системи редактора VBA, їй прзначена стандартна клавіша <F1>.

Закінчити роботу у редакторі VBA або вийти з нього можна, вибравши команду меню File→Close and Return to <додаток> або натиснувши комбінацію клавіш <Alt+Q>.

Вікно редактора VBA містить чотири готові панелі інструментів.

Standard (Стандартная). Ця панель виводиться на екран при першому запуску редактора VBA. Панель інструментів Standard містить 19 кнопок, які виконують різні функції: збереження результатів роботи, додавання нових форм і модулів, редагування та виконання програм.

Edit (Правка). Кнопки цієї панелі інструментів дозволяють редагувати текст у вікні Code (вікні програмного коду). Вони дублюють команди меню Edit.

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

UserForm (Пользовательская форма). Ця панель використовується при проектування форм. Більшість її кнопок дублюють команди меню Format.

У редакторі VBA використовується багато вікон, але слід пам’ятати, що вікон форм і програмного коду може бути кілька, вікна інших типів можуть бути тільки по одному.

Вікно провідника проекту (Project – <імя проекту>) містить список всіх файлів, що входять до даного проекту і призначене для швидкого доступу користувача до елементів списку.

Вікно Project (Проект) за звичай відкривається при запуску редактора Visual Basic. Якщо вікно Project (Проект) закрите, то відкрити його можна, вибравши в меню View (Вид) команду Project Explorer (Провідник по проектам).

Вікно властивостей об'єкту (Properties) містить список властивостей активної екранної форми або активного об'єкта управління, розташованого на активній формі. Властивості визначають зовнішній вигляд екранної форми або відповідного об'єкту управління та їх характеристики. Вікно властивостей поділено на дві колонки. В лівій знаходяться назви властивостей об'єкта, ім'я якого вказано у верхньому списку, а у правій – їх значення, які вибираються зі списку або вводяться з клавіатури.  Список властивостей подано на двох закладинах  – Alphabetic (Алфавітний) і Categorized (За категоріями).

Вікно редагування коду (Code) відображає програмний код для опрацювання подій. Щоб  активізувати це вікно необхідно двічі клацнути на об’єкті управління.

Вікно редагування форм (UserForm)  представляє собою робочу область, на якій користувач може розміщувати різні об’єкти або елементи управління: написи, поля, кнопки, перемикачі, малюнки тощо.

Елементи управління вибираються з панелі інструментів  Toolbox, рис. 9.

1. Pointer (Покажчик) - для позиціювання покажчика  Мишки;

2. Label (Напис) - розміщує на формі  текстові об’єкти типу написи, редагувати які під час виконання додатку неможливо;

3.  TextBox (Текстове поле) - розміщує на формі  поле для введення текстової інформації, чисел, дат;

4.  ComboBox (Поле зі списком) - створює на формі  об’єкт, що містить одночасно поле введення тексту і список значень, введений текст додається до елементів списку;

5. ListBox (Список) - створює на формі  список для вибо­ру одного чи декількох значень із запропонованого списку;

6.  CheckBox (Прапорець) - розміщує на формі  індикаторний перемикач, призначений для формування умов виконання чи певних налаштувань, значення якого (Value) при встановленій «галочці»- 1, за відсутньої - 0, позначений, але неактивний стан - 2;

7. OptionButton (Перемикач) - створює на формі  альтернативний перемикач для вибору налаштування чи режиму виконання програми;

8. Togglebutton(Вимикач) – кнопка має два значення - увімкнено та вимкнено.

9. Frame (Рамка) - створює на формі  рамку із заголовком для логічного групування об’єктів;

10. CommandButton (Командна кнопка) - роз­міщує на формі  кнопки управління для ініціюван­ня дій, виконання команд і т.д.;

11. TabStrip (Набір вкладинок) додає на форму набір вкладинок

12. MultiPage (Набір сторінок) додає на форму багатосторінковий елемент (контейнер для інших об’єктів)

13. ScrollBar(Вертикальна смуга прокручування) - розміщує на формі вертикальну смугу прокручування;

14.  Spinbutton(Лічильник) – кнопка додається до клітинки або текстового поля і використовується для збільшення або зменшення значення

15.    Image (Зображення) - створює на формі поля для відображення графічних зображень;

16.  RefEdit (Поле визначення посилання) додає на форму поле введення, призначене для спрощення запису посилань на клітинки та діапазони Excel. Ця кнопка наявна тільки у  Microsoft Excel.

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

Для створення нового модуля необхідно виконати наступні дії:

1. Вибрати потрібний документ.

2. Активізувати редактор VBA (<Alt+Fll>).

3. У вікні Project Explorer виділити сам проект або один з його компонентів.

4. Вибрати команду редактора VBA Insert→Module (Добавить→Модуль) або клацнути кнопку Insert на панелі інструментів Standard та вибрати команду Module.

У результаті редактор VBA відкриє на екрані вікно програмного коду нового модуля, ім’я якого за замовчування Modulen, где n— порядковий номер модуля. 

Для створення нової процедури в існуючому  модулі, необхідно спочатку відкрити вікно Code для даного модуля (View=>Code). Код процедури розміщують у будь-якому місці модуля. Процедура починається оператором Sub(підпрограма)  і закінчується оператором End Sub або оператором Function (функція) і закінчується оператором End Function.

Процедура типу Sub і процедура типу Function

У мові  VBA існує кілька типів процедур Sub i Function. Процедура типу Sub (процедура-підпрограма) — це частина програми, яка може виконуватися незалежно.

Синтаксис процедури типу Sub:

Sub Ім'я [(аргументи) ]

... <оператори>

End Sub

Ім'я — це унікальне ім'я процедури, складене відповідно до правил мови VBA. Список аргументів (необовязковий параметр в круглих дужках). Якщо аргументи у процедурі відсутні, то після імені ставиться порожня пара дужок.

Область дії кожної процедури визначається вказаним при її оголошенні ключовим словом — Private або  Public. При цьому можна виділити три типи області дії процедур.

1. Процедура, оголошена з використанням ключового слова Private, доступна для всіх процедур в даному модулі і недоступна процедурам з інших модулів:

Private Sub Ім’я [(аргументи)]

<оператори>

End Sub

2. Процедура, оголошена з використанням ключового слова Public, доступна для всіх модулів усіх проектів:

Public Sub Ім’я [(аргументи) ]

<оператори>

End Sub

3. Якщо в процедурі наявний оператор Option Private Module, то  процедури, оголошені з використанням ключового слова Public, будуть доступні всім програмам даного проекту і недоступні для інших.

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

Static Sub Ім’я [(аргументи)]

<оператори>

End Sub

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

Синтаксис процедури типу Function:

Function <ім'я функції> ([аргументи функції])

<оператори>

 End Function

де:

  • ім'я функції — значення, яке повертається у про­цедуру виклику після виконання процедури;

  • аргументи  функції — імена змінних, значення яких ви­користовуються функцією;

Останній оператор у тілі функції -  оператор присвоєння імені функції обчисленого значення.

Приклад

Function TotalTax(Cost)

StateTax=Cost*0.05  ‘Податки штату 5%

CityTax= Cost*0.015  ‘Міські податки 1,5 %

TotalTax= StateTax + CityTax

End Function

Модулі не зберігаються у окремих файлах тому, щоб використовувати один і той самий модуль  у різних проектах його слід експортувати у окремий файл з розширенням .bas вказівкою FileExport File, вказати місце зберігання та ім’я, а потім імпортувати його у потрібний проект вказівкою FileImport File.

Для виконання деякої процедури вибрати команду меню редактора VBA Tools→ Macros і у діалоговому вікні Macros у списку Macro Name вибрати ім’я процедури та клацнути на кнопці Run (Выполнить) або просто натиснути клавішу <F5>.

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

1. Клацнути вгорі над документом на кнопці  Настройка панели быстрого доступа і у контекстному меню вибрати команду Другие команды…(Рис. 10)

2. У діалоговому вікні Параметры Word у списку Выбрать команды из клацнути Макросы.

3. У списку зліва виділити потрібне ім’я і клацнути кнопку Добавить(Рис. 11). В результаті у список відібраних команд буде додано ім’я програми, а після натиснення на кнопку ОК на панелі швидкого доступу з’явиться нова кнопка.

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

Параметры Word клацнути Изменить і у діалоговому вікні Изменение кнопки вибрати готове зображення та закрити вікно.

Якщо при створенні макроса в Microsoft Word комбінацію клавіш для його запуска не було призначено, то це можна зробити пізніше, у діалоговому вікні Параметры Word. Для призначення комбінації клавіш макросу (чи VBA-програмі) у Word виконати наступні дії:

1. В меню Файл вибрати команду Параметры і у вікні Параметры Word перейти у розділ Настройка ленты. Клацнути на кнопці Настройка, розміщеній у нижній частині вікна.

2. У вікні Настройка клавиатуры вибрати у списку Категория значення Макросы, потім у списку Макросы вибрати ім’я програми (чи макросу).

3. У полі  Новое сочетание клавиш ввести призначену для виклику програми комбінацію клавіш і клацнути на кнопці Назначить, а потім на кнопці Закрыть.

Тепер викликати вказану VBА- програму можна буде за допомогою призначеної комбінації клавіш.

Для визначення (або зміни) комбінації клавіш у середовищі Microsoft Excel, треба виконати наступні дії:

1. На стрічці перейти на вкладинку Вид і у групі Макросы вибрати в меню кнопки Макросы команду Макросы. Відкриється діалогове вікно Макрос. У списку Имя макроса вибрати програму  і клацнути  на кнопці Параметры.

2. У діалоговому вікні Параметры макроса ввести клавишу, яка у комбінації з <Ctrl> буде використовуватися для виклику вказаної VBA-програми. Для поверненя в програму клацнути на кнопці ОК.

Для видалення деякого модуля потрібно виділити його і виконати вказівку  FileRemove object_name.

 

Теоретична довідка до ПР №25-26 Об’єктна структура мови  VBA

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

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

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

Загальні принципи побудови VBA-програм

Процес створення VBA- програми можна розділити на кілька етапів:

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

- На другому етапі реалізують проект: розробляють зовнішній вигляд форм з описом властивостей їх елементів та описують процедури обробки необхідних подій. Для цього у середовищі редактора VBA для створення нової форми вибрати команду  InsertUserForm, і на екран буде виведено вікно нової порожньої форми. Потім на форму копіюють елементи управління та пишуть програмний код у вікні програмного коду ViewCode.

- На третьому етапі здійснюють тестування  створеної програми. Для запуску програми на виконання дати команду меню редактора VBA Run (Выполнить...). При тестуванні програми перевіряється правильність її реакції на події, чи правильно опрацьовуються введені дані, чи розв’язує програма поставлену задачу.

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

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

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

■ Процедура — це окрема одиниця програмного коду VBA, яку можна викликати за іменем для виконання. Будь-яка процедура містить  один або кілька операторів.

■ Модуль — це іменована одиниця, що складається з однієї чи кількох процедур  та розділу оголошень, у якому оголошують змінні, константи та користувацькі типи даних, а також встановлюють параметри компілятора.

■ Проект — включає всі модулі, форми і зв’язані з додатком об’єкти, причому проект зберігається разом з даним документом.

Основні елементи мови програмування VisualBasicForApplication (VBA)

Алфавіт мови складається з таких символів:

  1.  Латинські літери від A до Z;

  2. Літери кирилиці;

  3. Цифри від 0 до 9;

  4. Знаки математичних операцій (^, *, /, \, Mod, +, -);

  5. Знаки відношень (<, >, <=, >=, <>, =);

  6. Розділові символи (. , : ; “ ” ( ) );

  7. Спеціальні символи (‘, !,  #,  $,  %,  & і  т.д.)

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

До основних службових слів відносять Data, Dim, Do – Loop, End, For – to – step, Gosub, Goto, If – then – else, Input, Next, On, Print, Read, Restore, Return, Stop, While, Select Case і т.д.

Змінна – це іменована зарезервована область оперативної пам’яті для тимчасового зберігання даних визначеного типу. Кожна змінна має ім’я, яке задається з використанням таких правил:

- ім’я може складатися з букв, цифр та символу підкреслення (_), але першим символом в імені повинна бути літера (буква)

- ім’я кожної змінної повинно бути унікальним і не співпадати з зарезервованими словами;

- ім’я не може містити більше 255 символів.

- ім'я не може містити розділових знаків, пробілів і наступних символів: %, &, !, #, @, $.

Наприклад, ClassName, Dobutok_Dodatnyh – правильні імена;

1Name, Print, Suma vsih – не правильні імена змінних.

Константа – це величина, значення якої не змінюється в процесі виконання програми, її ім’я задають за тими ж правилами, що і імена змінних.

Спосіб збереження змінних та констант визначається за типом даних VBA:

Byte    - мале ціле число без знаку (от 0 до 255), що займає в пам’яті  1 байт

Integer  - середнє ціле число із знаком (от –32768 до 32767), що займає в пам’яті  2 байта

Long     - велике ціле число (від -2147483648 до 2147483647), що займає в пам’яті  4 байта

Single  - число с плавающою точкою(від -3.402823E38 до 3.402823E38 ), що займає в пам’яті  4 байта

Double   - число с плавающою точкою(від -1.79769313486232E308 до 1.79769313486232E308), що займає в пам’яті  8 байт

Currency  - велике число у грошовому форматі(від -922337203685477.5808 до 922337203685477.5807), що займає в пам’яті  8 байт

Decimal   - число с плавающою точкою(±79 228 162 514 264 337 593 543 950 335 без десяткової точки або 28 цифр після десяткової точки), що займає в пам’яті  14 байт

Date        - дата або час, що займає в пам’яті  8 байт

Boolean  - логічна змінна, що може набувати  два значення: True і False, що займає  2 байта

String      - рядоксимволів довільної довжини  (1 байт на 1 символ), від 0 до 2 млрдю символів

String*k  - рядоксимволів фіксованої довжини k(k – будь-яке число), від 0 до 65 400 символів

Variant    - змінна може набувати будь-яке значення, не менше 16 байт пам’яті.

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

Dim ім’я_змінної [As тип_даних]- для оголошення локальної змінної – видимої тільки у цій процедурі, при виході з процедури її значення буде втрачено.

Private ім’я_змінної [As тип_даних]- для оголошення локальної змінної - видимої у всіх процедурах одного модуля, до якого належать ці  процедури, але опис такої змінної потрібно зробити у розділі Declarations.

Static ім’я_змінної [As тип_даних]- для оголошення локальної змінної – видимої тільки у цій процедурі, але після виходу з цієї процедури її значення не втратиться.

Public ім’я_змінної [As тип_даних]- для оголошення глобальної змінної – видимої у всіх процедурах усіх модулів. Вона може бути оголошена у стандартному модулі.

Наприклад.

Option Private Module

Dim a As Integer

Private b As Long

Public с As Single

Public Sub NewSubO

Dim x As Single ,

End Sub

Змінні а та  b доступні у межах всього модуля. Змінна с буде доступна для всіх модулів, але тільки для даного проекту (т.я. вказано оператор Option Private Module). Змінна х буде доступна тільки всередині процедури NewSub, т.я. вона оголошена безпосередньо в ній.

Крім простих величин у VBA використовують структуровані величини – масиви.

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

<змінна> = <вираз>

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

Стандартні функції для числових величин подано у таблиці 1.

Таблиця 1

Стандартні математичні функції

Позначення функції

Дія

В математиці

В програмі VB

|x|

Abs(Х)

Обчислює абсолютне значення виразу  Х

cosx

Cos( Х )

Обчислює косинус кута Х, вираженого в радіанах

sinx

Sin( Х )

Обчислює синус кута Х, вираженого в радіанах

tgx

Tan( Х )

Обчислює тангенс кута Х, вираженого в радіанах

arctgx

Atn(x)

Обчислює кут (в радіанах), тангенс якого дорівнює х

ex

Exp( Х )

Обчислює константу е в степені Х

lnx

Log (Х )

Обчислює логарифм  виразу  Х

Знак числа x

Sgn( Х )

Повертає – 1 , якщо Х< 0; 0, якщо Х= 0; 1 , якщо Х > 0

 

Sqr( Х )

Обчислює квадратний корінь з  виразу  Х

-

Str( Х )

Перетворює числове значення   Х  на рядкову величину

-

Val( Х )

Перетворює рядкову величину Х на числове значення

-

Rnd( Х )

Генерує випадкове число між 0 та 1

Наприклад:

k = 4

inn = 457 - k

ss = “Сообщение об ошибке:”

ainn (45) = (4567*k – inn)*x1(3)*cos(x3(5) )

x2(0) = 2.71

pr_equip.cod = 12 – x2(0)

pr_equip.price = 2*sin(2*j) – pr_tax

Якщо оператор не поміщається на один рядок, то він переноситься на наступний рядок за допомогою символу підкреслення «_», відділеного від тексту оператора пропуском. Наприклад:

d = log(a) * (1 + sqr(b) / k)  _

*tan(c)^3

Після кожного оператора в тому ж рядку може бути коментар (пояснення). Для запису  коментаря використовують апостроф або службове слово Rem:

<оператор>  ‘<коментар>

<оператор>   Rem <коментар>

Приклад процедури з лінійним обчислювальним процесом, записаної мовою VBA:

Private Sub Prog1

Dim a As Byte, b As Single , c As Single 

Dim d As Single 

a = 5

b = log(a)

c = sin(a*b)

d = c* (1 + b / 100) ^a

Print  d

End Sub

Операторвведення InputBox

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

InputBox (< повідомлення > [, < заголовок > ] [,< значення > ] [, < x, y > ])

Де < повідомлення > та < заголовок > - довільні, які беруться у лапки (“), < значення > - значення змінної, а < x, y >  - координати лівого верхнього кута вікна на екрані. Якщо будь-який елемент оператора замовчується , ставляться коми.

Приклад (Рис. 12): х = InputBox (“х =” , “ Проект ” , , 400, 400)

У виведеному діалоговому вікні в поле вводу внести значення змінної і натиснути ОК. Введене значення присвоюється змінній і управління передається наступному оператору в програмі. При натисканні Cancel, дія відміняється.

Оператор виведення MsgBox

Цей оператор використовується для одержання від користувача відповідей (“Так” або “Ні”) на короткі повідомлення. Синтаксис:

MsgBox <повідомлення > [, число ] [, < заголовок > ]

Де <повідомлення > і < заголовок > -  довільні символи, число – цифра в залежності від якої  змінюється вигляд вікна (наприклад, 16 – повідомлення про помилку, 64 – інформаційне повідомлення, 3 – кнопки Да, Нет, Отмена). Повідомлення може включати арифметичний вираз, якій задається через функцію Str ().

Приклади:

1. MsgBox  “Процес обчислення завершено”, 1, “Проект” (Рис.13)

2. MsgBox (“х=” + Str  (x) + “ “ + ” x+sin(x)=”+Str (x+Sin(x))), , "проект" (Рис.14)

Результатом виконання буде виведене вікно з результатом розрахунку, передбачається що значення “х” було вказано раніше :

Оператор виведення даних Print

Дія цього оператора полягає у виведенні результатів роботи програми у окреме вікно Immediate Window. Синтаксис:

Debug.Print [ список елементів виведення ]

До  списку елементів виведення можуть входити: константи, змінні, арифметичні вирази, послідовність символів  у лапках, функції Tab, Spc, String. Елементи списку відокремлюються комою (,) або крапка з комою (;). У випадку розділення комою наступна інформація друкується з нової зони (одна зона 14 позицій),. У випадку розділення крапкою з комою наступна інформація друкується безпосередньо після попередньої.  Якщо елементом списку є вираз, то спочатку система обчислює значення виразу а потім друкує результат.  Функція Tab(n) –  визначає номер позиції з якої відбувається друк. Функція Spc(n)визначаєкількість позицій, які треба пропустити. Функція String(n, “символ”) – визначає кількість символів, які друкуються. Рис. 15.

 

Теоретична довідка до ПР №27 Оператори управління обчислювальним процесом

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

Оператори умовного переходу If...Then

1)  Оператор If … Then  - перевіряється одна умова і виконується один оператор чи блок операторів.

Синтаксис:

            If <умова> Then <оператор>

або з декількома операторами

      If <умова> Then

        <Блок операторів>

      End If

2) Оператор If … Then … Else - перевіряється одна умова і виконується один із двох блоків операторів.

Синтаксис:

            If умова Then

            <Блок операторів 1>

            Else

      <Блок операторів 2>

            End If

Приклад.

Sub Вік ()

  If vik <= 7 Then

      MsgBox "Дошкiльник"

Else

    MsgBox "Школяр або дорослий"

   End If

End Sub

 

3) Оператор If … Then … ElseIf  - перевіряється кілька умов і виконується один з декількох блоків операторів.

Синтаксис:

            If <умова1>  Then

            <Блок операторів 1>

            ElseIf <умова2> Then

           <Блок операторів 2>

            ElseIf <умова3> Then

           <Блок операторів3>

 …

Else

            <Блок операторів_n>

            End If

Приклад.

        Sub Вік1 ()

 vik= InputBox ("Вкажіть вік")

 If vik < 7 Then

      MsgBox "Дошкiльник"

ElseIf  vik < 17 Then

MsgBox "Школяр"

ElseIf  vik < 23 Then

MsgBox "Студент"

ElseIf  vik < 55 Then

MsgBox "Спецiалiст"

Else

MsgBox "Пенсiонер"

End If

       End Sub

Оператор вибору SelectCase

4) Оператор Select Case – оператор вибору, перевіряється одна умова і виконується один з декількох блоків операторів. Оператор заміняє серію операторів ElseIf, якщо один і той же вираз порівнюється з декількома значеннями

Синтаксис:

            Select Case <вираз>

            Case <значення1>

              <Блок операторів 1>

            Case <значення2>

              <Блок операторів 2>

            …

            Case Else

              <Блок операторів N>

            End Select

Приклад.

Sub SelectCase ( )

   Dim a As Single

   a = InputBox("Введіть ваш зріст у сантиметрах")

  Select Case a

  Case Is < 150

  MsgBox "У вас дуже малий зріст"

  Case 151 То 178

  MsgBox "Ви людина середнього зросту"

  Case Is > 178

  MsgBox "Ви висока людина"

  End Select

End Sub

Об’єкти VBА у середовищі  MS Excel

Мова VBA містить готові об’єкти, призначені  для використання в різних додатках Microsoft Office. В середовищі Microsoft Excel такими об’єктами є: книга, лист, діапазон листа, діаграма. Рядок аркуша, стовпчик, окрема клітинка також є діапазоном. Книга визначається іменем файлу. Аркуші та діаграми книги визначаються або за номером у книзі, або за іменем аркуша(діаграми). Стовпчики та рядки визначаються номером. Діапазон на аркуші визначається або координатами двох кутів діапазону, або присвоєним іменем. Клітинка визначається назвою стовпчика і  номером рядка.

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

Workbooks (“book1.xls) має значенням книгу у файлі з іменем “book1.xls”;

Worksheets (“Лист1”) або Worksheets (1) має значенням перший лист активної книги;

Range (“B3:G7”) має значенням діапазон активного листа з координатами B3 і G7;

Workbooks (“book1.xls) .Worksheets("Лист2").Range("М5:S2 0").

Для того, щоб у програмі змінну WH оголосити як аркуш книги, а змінну RR оголосити як діапазон, необхідно записати так:

Dim WH as Worksheet, RR as Range

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

Set WH = Worksheets (“Лист2”)

Set RR = WH.Range (“A1:H8”)

Після цих  команд змінна WH вказує на лист відкритої книги з іменем “Лист2”, а змінна RR відповідає діапазону A1:H8 цього листа. Тут запис WH.Range означає метод Range об'єкта WH, що повертає діапазон аркуша за його координатами.

Нижче подано перелік деяких властивостей і методів, що можна застосувати до об'єктів:

метод Activate для аркуша – робить активним даний аркуш;

властивість Cells(j,k) для аркуша означає клітинку у j-му рядку і  k-му стовпчику аркуша;

властивість ActiveCell для аркуша означає поточну клітинку аркуша;

властивість Selection для аркуша означає сукупність всіх виділених діапазонів на аркуші;

метод Select для діапазону робить виділеним даний діапазон;

властивість Cells(j,k) для діапазону означає клітинку у j-му рядку і k-му стовпчику діапазону;

властивість Offset(j,k) для діапазону означає клітинку із зміщенням на  j рядків і k стовпчиків від верхнього кута діапазону;

властивість Rows.Count повертає кількість рядків у діапазоні;

властивість Columns.Count повертає кількість стовпчиків у діапазоні;

властивість CurrentRegion для клітинки повертає максимальний діапазон, що містить дану клітинку і обмежений з усіх сторін пустими рядками і стовпчиками;

властивість Font діапазону або клітинки представляє собою опис шрифта для запису даних;

властивість Value для клітинки задає значення, що зберігається або обчислюється в клітинці;

метод Activate для клітинки робить цю клітинку поточною;

властивість Areas(k) означає k-й по порядку діапазон серед кількох виділених діапазонів.

 

Теоретична довідка до ПР №28-29 Оператори циклів

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

Ітераційний цикл

 Оператор циклу без лічильника Do … Loop використовується в одному з чотирьох варіантів:

Do While <умова продовження циклу> … Loop

Do Until <умова закінчення циклу > … Loop

Do … Loop While <умова продовження циклу>

Do … Loop Until <умова закінчення циклу>

Нехай, наприклад, треба розрахувати значення Y за­лежно від введеного значення X. Тоді фрагмент програ­ми матиме такий вигляд:

1)   У даному прикладі цикл виконується, якщо введені значення Х задовольняють умову Х>0:

X = Input ("Значення X", Х)

Do While Х> 0

Y=sqr(3*Х+7)

Debug.Print X;Y

Loop

2) У наведеному нижче прикладі  цикл виконується, якщо X <5:

X = InputBox ("Значення X")

Do Until X>5

Y=sqr(15-3*Х)

Debug.Print X;Y

Loop

Арифметичний цикл

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

For <змінна циклу = початкове значення> То <кінцеве значення> [Step<крок циклу>]

Тіло циклу

Next [змінна циклу]

Приклад:

Private Sub Prog2()

Dim add As String, n As Integer

add = ""

For n = 1 To 21 Step 2

add = add & n & " "

Next n

MsgBox "Це послідовність непарних чисел:" & "  " & add

End Sub

Приклади програм з використанням об’єктів MS Excel у циклічних обчислювальних процесах:

1.  Програма переписує вміст стовпчика «B2:B7» на аркуші «Лист1» у стовпчик «E2:E7», виконуючи операції з клітинками аркуша:

 Sub example3 ()

        Dim j as integer

        Worksheets("Лист1").Activate   ‘ Аркуш «Лист1» стає поточним активним аркушем

        For j=2 To 7

                    Cells(j,5).Value = Cells(j,2).Value

        Next j

End Sub

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

Sub example4 ()

        Dim R1 as Range, R2 as Range, j as integer, k as integer, m as integer, n as integer

        Set R1 = Worksheets("Лист1").Range ("B2:C7")

        Set R2 = Worksheets("Лист1").Range ("E4:F9")

        m = R1.Rows.Count

        n = R1.Columns.Count

        For j=1 to m

                For k=1 to n

                        R2(j,k).Value = R1(j,k).Value

                        R1(j,k).Value = “ ”

                Next k

        Next j

End Sub

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

 Function summ (adr as string) as single

        Dim j as integer, k as integer, m as integer, n as integer

        Dim s as single

        Dim RN as Range

        Set RN = Range (adr)         

     Rem Встановити діапазон із заданою в параметрі функції адресою

        m = RN.Rows.Count             ‘Кількість рядків діапазону

        n = RN.Columns.Count          ‘Кількість стовпців діапазону   

        s = 0

        For j = 1 to m

                For k = 1 to n

                        s = s + RN(j, k).Value

                Next k

        Next j

        summ = s

End Function

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

Function minm (adr as string) as Range

        Dim j as integer, k as integer, m as integer, n as integer

        Dim s as single

        Dim RN as Range, RC as Range

        Set RN = Worksheets ("Лист1").Range (adr)

        m = RN.Rows.Count

        n = RN.Columns.Count

        Set RC = RN (1, 1)

        For j = 1 to m

                    For k = 1 to n

                                IF RN (j, k).Value < RC.Value Then

                                            Set RC = RN (j, k)

                                End IF

                    Next k

        Next j

        Set minm = RC

End Function

5. В наступному прикладі мінімум в діапазоні запишеться, наприклад, в клітинку B13.

 Sub example5 ()

        Cells (13, 2) = minm ("B2:C11").Value

End Sub

 

Теоретична довідка до ПР № 30-31 Використання масивів та матриць

Масив — це група однотипних елементів, об’єднаних одним іменем і впорядкованих за індексами, які визначають місце розташування  елемента у групі.У мові VBA будь-який масив має власне ім’я і складається із декількох елементів. Кожен елемент масиву має ім’я та номер (індекс), який записано у круглих дужках. Наприклад, А(1), Numer (5). Такий масив називається одновимірним.  У мові VBA нумерація елементів у масиві починається з нуля, але за допомогою оператора Option Base 1 можна змінити початковий індекс.

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

Мова VBA підтримує два типи масивів — статичні та динамічні. Використання динамічних масивів є доцільниму випадках: 1) коли розмір масиву невідомий до моменту виконання програми; 2) якщо в ході виконання програми розмір масиву буде змінюватися; 3)якщо при виконанні програми  після завершення використання масиву необхідно звільнити пам’ять.

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

'Одновимірний масив з 51 элемента

Dim M1(50) As Integer

'Двовимірний масив з 11 рядків по 21 елементу

Dim M2(10,20) As Integer

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

Dim M1 () As Single

Перед використанням динамічного масиву у процедуру вписують оператор ReDim, який визначає фактичну розмірність масиву, наприклад:

ReDim M1(5) 'одновимірний масив з 6 елементів

ReDim M1(1 ТО 6, 1 То 10) 'двовимірний масив з 60 елементів

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

Dim M() As Single

ReDim M(1 To 10, 1 To 20)

ReDim Preserve M(1To 10, 1 To 50)

Для оголошення констант використовують ключове слово Const, наприклад:

Const КilkistVydNarahuvan =16

Const VydNarahuvan= "Нарахування премії"

Приклад 1. Обчислити середнє геометричне елементів одновимірного масиву Y, які задовольняють умові yi>0. Середнє геометричне розраховується за формулою

Таблиця ідентифікаторів:

Змінна алгоритму

Кількість елементів у масиві

Добуток елементів масиву, що відповідають умові yi>0

Кількість елементів масиву, що відповідають умові yi>0

Заданий масив

Номер елементу масиву -параметр циклу

Ідентифікатор

n

D

p

Y(20)

i

Тип

integer

single

integer

integer

integer

Текст програми:

Sub Odnovymirniy_masiv()

' Оголошення змінних

Dim Y(20) As Integer

Dim n As Integer,  i As Integer, p As Integer

Dim D As Single, S As Single

' Уведення даних

n = InputBox("Задайте кiлькiсть елементiв n=")

' Встановлення початкового значення добутку та кількості елементів, що відповідають умові

D = 1

p = 0

For i = 1 To n

Y(i) = InputBox("Задайте елемент масива Y(" + Str(i) + ")=")

If Y(i) > 0 Then

D = D * Y(i)

p = p + 1

End If

Next i

s = D ^(1/p)

MsgBox ("Середнє геометричне s=" + Str(s))

End Sub

Контрольний приклад

Y=

Виконання обчислень для даних тестового прикладу.

Задайте кiлькiсть елементiв n=6

Задайте елемент масива Y[1]=2;

Задайте елемент масива Y[2]=-54;

Задайте елемент масива Y[3]=4;

Задайте елемент масива Y[4]=-6;

Задайте елемент масива Y[5]=4;

Задайте елемент масива Y[6]=0;

Результат:

Приклад 2. Знайти в кожному рядку масиву F(N,M), N£20, M£10 мінімальний та максимальний елементи у кожному рядку і розмістити їх на місці першого та останнього елементів рядка відповідно. Масив надрукувати у звичайному вигляді.

Таблиця ідентифікаторів:

Змінна алгоритму

Кількість рядків у масиві

Кількість стовпців у масиві

Номер максим елементу в рядку

A(20,10)

i

j

min

max

Номер мінім елементу в рядку

k

K1

Ідентифікатор

n

m

p

A(20,10)

i

j

min

max

o

k

K1

Тип

integer

integer

integer

integer

integ

integ

integ

integ

integ

integ

integ

Текст програми

Sub Matrix()

' оголошення змінних

Dim A(20, 10) As Single

Dim B(20, 10) As Single

 Dim n As Integer, m As Integer

Dim i As Integer, j As Integer, p As Integer,

Dim K1 As Integer, k As Integer, o As Integer

Dim min As Single

Dim max As Single

n = InputBox("уведіть кількість рядків n=")

m = InputBox("уведіть кількість стовпців m=")

For i = 1 To n

 For j = 1 To m

A(i, j) = InputBox("уведіть елемент масивуA(" + Str(i) + "," + Str(j) + ")=")

 Next j

Next i

For i = 1 To n

 min = A(i, 1)

 max = A(i, 1)

p = 1

 o = 1

 For j = 1 To m

 If (A(i, j) < min) Then

 min = A(i, j)

 p = j

 End If

 If (A(i, j) > max) Then

 max = A(i, j)

 o = j

 End If

 Next j

k = A(i, p)

 k1 = A(i, o)

A(i, o) = k1

 A(i, p) = k

 A(i, 1) = min

 A(i, m) = max

Next i

For i = 1 To n

For j = 1 To m

B(i, j) = A(i, j)

MsgBox ("Елемент масиву B(" + Str(i) + "," + Str(j) + ")=" + Str(B(i, j)))

Next j

Next i

End Sub

Контрольний приклад. Задано масив А

Виконання програми для даних контрольного прикладу:

Задайте кiлькiсть рядкiв матрицi n=4;

Задайте кiлькiсть стовбцiв матрицi m=6;

Задайте елемент масиву А[1,1]=1;

Задайте елемент масиву А[1,2]=5;

Задайте елемент масиву А[1,3]=45;

Задайте елемент масиву А[1,4]=7;

Задайте елемент масиву А[1,5]=11;

Задайте елемент масиву А[1,6]=0;

Задайте елемент масиву А[2,1]=65;

Задайте елемент масиву А[2,2]=4;

Задайте елемент масиву А[2,3]=25;

Задайте елемент масиву А[2,4]=3;

Задайте елемент масиву А[2,5]=1;

Задайте елемент масиву А[2,6]=5;

Задайте елемент масиву А[3,1]=1;

Задайте елемент масиву А[3,2]=22;

Задайте елемент масиву А[3,3]=5;

Задайте елемент масиву А[3,4]=4;

Задайте елемент масиву А[3,5]=0;

Задайте елемент масиву А[3,6]=9;

Задайте елемент масиву А[4,1]=7;

Задайте елемент масиву А[4,2]=5;

Задайте елемент масиву А[4,3]=2;

Задайте елемент масиву А[4,4]=1;

Задайте елемент масиву А[4,5]=4;

Задайте елемент масиву А[4,6]=4;

Після виконання програми отримуємо новий масив В:

 

Теоретична довідка до ПР №32 Рядкові величини

Для зберігання  рядкових величин  у мові VBA використовується тип даних String. Текстові дані у мовах програмування прийнято називати рядками. Значення рядкових величин завжди записують у лапках (" ").  Приклад оголошення  рядкових величин та присвоєння їм значень:

Dim s As String

s = "Це рядок з 22 символів"

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

Функція

Призначення

Приклад

Ucase

Переводить усі символи рядка у верхній регістр

Ucase ("Ivanenko") =IVANENKO

Lease

Переводить усі символи рядка в нижній регістр

Lease ("Ivanenko") =ivanenko

Len

Визначає довжину рядка

Len ("Ivanenko") = 8

LTrim

RTrim

Trim

Видаляє пропуски на початку рядка

Видаляє пропуски в кінці рядка

Видаляє пропуски з обох боків рядка

 

Right

Повертає задане число символів, починаючи від кінця рядка

Right ("Ivanenko", 2) = “ko"

Left

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

Left ("Ivanenko", 4) = "Ivan"

Mid

Повертає задане число символів, починаючи від указаної позиції

Mid ("Ivanenko", 2, 3) = "van"

String

Повторює вказаний символ уста­новлену кількість разів

String (4, "$") = $$$$

Asс

Повертає ASCII-код для вказаного символу

Asс(„R”) = 82

Chr

Повертає символ для вказаного ASCII-коду

Chr(114) =  r

Str( Х )

Перетворює числове значення   Х  на рядкову величину

Val( Х )

Перетворює рядкову величину Х на числове значення

Функції Str та Val

Функція Val () перетворює рядкову величину у число, якщо рядок містить цифрові символи. Якщо перший символ не цифра, то функція Val повертає значення 0.

Приклад застосування функцій Str  та Val

У вікні Immediate задати дві рядкові величини  ата b наступного виду:

а="10"

b="12"

При додаванні цих двох рядків одержують рядок

"1012"

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

Print Val (а) + Val (b)

то одержимо число  22 (рис. 16):

Рис. 16. Результат застосування функції Val

Приклад застосування функцій, що видаляють пропуски у рядку:

c= "  Видалення пропусків   "

Print LTrim(c) ' Повертає  "Видалення пропусків    "

Print RTrim(c) ' Повертає  "   Видалення пропусків"

Print Trim(c) ' Возвращает "Видалення пропусків"

Виділення підрядка

Функції Left и Right виділяють у символьному рядку підрядок визначеної довжини, починаючи з крайнього лівого або крайнього правого символу, а функція Mid дозволяє вибрати будь-який підрядок.

Синтаксис функцій:

Left(вираз, кількістьСимволів)

Right(вираз, кількістьСимволів)

Mid(вираз,  номерПозиції [, кількістьСимволів])

Приклади використання цих функцій та їх значення:

c= "Виділення підрядка"

Print Left(c,3) ' Повертає "Вид"

Print Right (c, 5) ' Повертає "рядка"

Print Mid (c, 11,3) ' Повертає "під"

Перетворення рядків

Функції UCase() і LCase() використовуються у Visual Basic для перетворення  малих букв у великі і великих у малі. Крім цього є функція StrConv, яка перетворює вираз у власне ім’я, що починається з великої букви. Т.я. функції UCase () та LCase () повертають значення типу Variant, тому щоб результат мав тип string, необхідно використовувати функції UCase$ () і Lcase$ ().

Синтаксис функцій:

UCase (символьний рядок)

LCase(символьний рядок)

Приклади використання цих функцій та їх значення:

1) c = "друк"

Print UCase(c) ' Повертає "ДРУК"

Print UCase$(c) ' Повертає "ДРУК"

2) c= "ДРУК"

Print LCase(c) ' Повертає "друк"

3) c = "Іванов іван іванович"

Print StrConv(c,vbProperCase) ' Повертає "Іванов Іван Іванович"

4) c = "ІВАНОВ ІВАН ІВАНОВИЧ"

Print StrConv(c, vbProperCase) ' Повертає "Іванов Іван Іванович"

Визначення положения рядка у другому рядку

Visual Basic має дві функції, що здійснюють пошук символьного рядка в іншому рядку: inStr() та inStrRev(). Функція  inStr() здійснює пошук від початку рядка до його кінця, а InStrRev() здійснює пошук в протилежному напрямку, тобто від кінця до початку.

Функція inStr () має синтаксис:

InStr (ЗаданийРядок, рядокПошуку)

В результаті пошуку функція повертає номер позиції першого входження шуканого рядка.

Приклад:

Print InStr ("Сьогодні гарна погода", "погода") ‘Повертає “16”

Об’єднання рядків

У Visual Basic для роботи з рядками використовується тільки один оператор — оператор об’єднання. За допомогою даного оператора можна об’єднати кілька рядків в один. Цей оператор позначається символом амперсанда (&) або символом "плюс" (+).

 

Теоретична довідка до Практичної роботи № 32-33 Властивості екранної форми та елементів управління

Мова VBA дозволяє використовувати екранні  форми, створені користувачем для конкретних задач у вигляді діалогових вікон та полів.

 Користувацькі діалогові вікна створюються у редакторі VBA як екранні форми. Ці форми складаються з вікна форми та кількох елементів управління, розміщених у цьому вікні. Все це об’єкти VBA, які мають визначені властивості, методи та події.

Властивості – це найпростіші характеристики об’єкта. Вони зберігають інформацію про поточний стан об’єкта. Для зміни характеристик об’єкта необхідно змінити значення його властивостей.

Використовувати властивості об’єкта можна двома способами — або отримати поточне значення властивості, або встановити нове значення властивості. Щоб одержати поточне значення властивості, треба присвоїти це значення деякій змінній. Для цього використовують такий синтаксис:

Змінна = Object.Властивість

Для присвоєння властивостям деякого значення використовують синтаксис.

Object.Властивість = ЗначенняВластивості

Найбільш важливі загальні властивості всіх об’єктів:

Властивість

Значення

Caption

Заголовок

Left

Ліва межа

Top

Верхня межа

Height

Висота

Width

Ширина

Name

Ім'я

Enabled

Дозволено

Visible

Видимість

Index

Індекс

Основні властивості об’єкта типу форма:

AutoRedraw

Автоматичне  перемальовування

BackColor

КолірФону

Border Color

Колір межі

ControlBox

Кнопка управління

Font

Шрифт

ForeColor

Передній Колір

Icon

Значок

MaxButton

Кнопка Розгортання

MinButton

Кнопка Згортання

Picture

Картинка

WindowsState

Стан вікна при запуску

Основні властивості об’єктів типу текстове поле і мітка:

Alignment

Вирівнювання

AutoSize

АвтоРозмір

BackColor

КолірФону

Border Color

Колір межі

BorderStyle

Стиль Межі

BorderWidth

Ширина Межі

Font

Шрифт

MultiLine

Багато Лінійний

PasswordChar

Знак Паролю

ScrollBars

Лінійки Прокручування

SelLength

Кількість виділених символів

SelText

Виділений текст

SelStart

Початок виділеного блоку

Text

Текст

Основні властивості об’єкту типу зображення:

Властивість

Значення

Center

Вирівнювання малюнка до центру

Picture

Ім’я графічного файлу

Stretch

Приведення розміру зображення до заданих розмірів об’єкта

Основні методи та події об’єктів VBA

Доступ до властивостей можливий тільки через їх власні методи, тобто команд опрацювання саме цих конкретних властивостей. Методи – це звичайні підпрограми-процедуры, що виконують різні дії, наприклад, змінюють значення властивостей об’єктів. Методи зв’язані з конкретним об’єктом, тому звертатися до них можна тільки через відповідний об’єкт. Метод є частиною об’єкта і діє тільки на той об’єкт, через який здійснюється звернення до цього методу. Для виклику методу використовується наступний синтаксис:

Object.Метод

або

Object.Метод Аргумент1, Аргумент2, АргументЗ...

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

Створення процедур опрацювання подій

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

За замовчуванням процедури опрацювання подій є локальними (Private), тобто при створенні процедури редактор VBA автоматично додає на початок її оголошення ключове  Private. Процедури опрацювання подій мають імена, в яких назва форми чи елемента управління об’єднано з назвою події за допомогою  символу підкреслення, наприклад

Private CommandButtonl_Click

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

1. Відкрити вікно програмного коду форми  подвійним клацанням на формі або виділити форму та вибрати команду View=>Code з контекстного меню форми або натиснувши  клавішу <F7>.

2. Вибрати у лівому списку вікна програмного коду форми той об’єкт, для якого буде  створюватися процедура опрацювання події.

3. Вибрати у правому списку вікна програмного коду форми подію. При цьому, якщо ще не створено програмний код, VBA автоматично  створить заготовку потрібної процедури.

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

Наприклад. На формі є елемент управління  Счетчик (SpinButtonl), зв’язаний с текстовим полем (TextBoxl). Початкове значення лічильника, що відображається у текстовому полі, дорівнює 1. Клацання по верхній кнопці лічильника збільшує (а по нижній — зменшує) значення у текстовому полі на одиницю. Якщо це поле призначено для введення номера місяця року (від 1 до 12), то коли нове значення виходить за межі допустимого, то виконується його заміна на максимально або мінімально можливе. Далі поточне значення  лічильника присвоюється властивості Value текстового поля.

Private Sub SpinButtonl_Change()

If SpinButtonl.Value = 13 Then

SpinButtonl.Value = 12 'Номер месяца не может превышать 12

End If

If SpinButtonl.Value = 0 Then

SpinButtonl.Value = 1 'Номер месяца не может быть меньше 1

End If

TextBoxl.Value = SpinButtonl.Value

End Sub

З повагою ІЦ “KURSOVIKS”!