
- •Міністерство освіти і науки україни
- •Програмування мовою
- •У середовищі Microsoft Excel
- •1 Введення
- •2 Об'єкти Excel, їхньої властивості і методи.
- •2.1 Об'єкт Workbook і сімейство Workbooks
- •2.2 Об'єкт Worksheet і сімейство Worksheets
- •Count - повертає кількість об'єктів у наборі; у прикладі перемінної k присвоюється значення, рівне числу рядків діапазону a1:d4
- •Приклад макроса
- •3 Мова програмування vba
- •3.1 Типи перемінних, оголошення перемінних, область дії перемінних
- •Оператор присвоювання
- •Стандартні діалогові вікна
- •Умовний оператор і оператор вибору.
- •3.5 Оператори циклу
- •Оператор циклу по сімейству об'єктів.
- •4 Створення функцій і процедур користувача
- •5 Створення форм та їх використання
- •5.1 Елементи керування у формах, їхні властивості, методи, події.
- •5.2 Приклади створення форм
- •Література
5 Створення форм та їх використання
5.1 Елементи керування у формах, їхні властивості, методи, події.
Форма UserForm надає користувачу можливість створювати діалогові вікна для інформаційних систем користувача. Вона служить базою вікна користувача, на якій у залежності від розв'язуваної задачі розміщають необхідні елементи керування. VBA має умонтований набір елементів керування, що подані на відповідній панелі.
Мал. 4. Панель елементів керування.
Використовуючи цей набір і редактор форм не важко створити будь-який інтерфейс користувача. Більшість елементів керування можна розташовувати як на робочому листі, так і у формі. Наведемо список елементів керування в порядку їх розташування на панелі і їхнє призначення:
Напис - ім'я Label, призначена для висновка тексту у формі.
Поле - ім'я цього елемента керування по умовчанню - TextBox. Використовується для введення або виведення даних. У полі можна відобразити які-небудь дані або в поле можна ввести дані і прочитати їх із поля.
Список - ім'я ListBox. Використовується для виведення списку яких-небудь значень, із якого користувач може вибрати одне або декілька значень, що запам'ятовуються для подальшого використання.
Поле зі списком - ComboBox. Використовується для створення списку , що розкривається, із якого користувач може вибрати один з елементів або увести своє значення.
Прапорець - CheckButton. Використовується для виведення прапорця, що буває в однім із двох станів: є прапорець і немає.
Перемикач - OptionButton. Використовується для вибору одного з декількох альтернативних варіантів.
Вимикач - ToggleButton. Використовується для того, щоб відзначити одне з двох станів - включене/виключено.
Рамка - Frame. Використовується для угруповання елементів керування у формі.
Кнопка - ім'я CommandButton. Використовується для запуску процедур, пов'язаних із щиголями на кнопці.
Набір вкладок і Набір сторінок - TabStrip і Page. Створюють вікна діалогу, у яких розташовано декілька сторінок або декілька вкладок.
Смуга прокручування - ScrollBar. Виводить у формі смугу прокручування.
Лічильник - SpinButton. Виводить на екран елемент, що складається з двох стрілк нагору й униз, щиголі на який змінюють значення внутрішнього лічильника на одиницю.
Малюнок - Image. Використовується, щоб помістити у формі відображення графічного файла у форматі bmp, gif, jpg.
Редагування посилань - RefEdit. Цей елемент керування використовується для редагування посилань на клітини або діапазони.
Кожний елемент керування розміщається у формі в процесі конструювання форми. Елементи керування мають властивості, що можна задати при роботі в режимі конструктора або в програмі, що виконується при запуску форми. Для встановлення властивостей елемента керування вручну при його конструюванні необхідно виділити елемент керування і натиснути кнопку Свойства панелі інструментів Элементы управления. На екрані відобразиться діалогове вікно Свойства.
Після установки властивостей елементів керування і форми переходять до написання коду, пов'язаного з ними і з подіями, що ініційовані користувачем. У кожного елемента керування є цілий набір подій, що опрацьовують ті або інші дії. Наведемо деякі з них:
Click - щиголь мишею на елементі керування (частіше усього на кнопці або на елементі списку);
DblClick - подвійний щиголь мишею на елементі керування.
Код обробки подій записується у вікні коду (програми), що пов'язаний із формою. Для активізації вікна програми достатньо або двічі клацнути на елементі керування або натиснути кнопку Исходный текст панелі інструментів Элементы управления. У лівій верхній частині вікна програми знаходиться раскрывающийся список з іменами об'єктів, для яких у даній формі створюються процедури опрацювання подій.
У цьому списку поданий поділ програми Загальна частина, де описуються переменные і константи рівня форми.
У правій верхній частині вікна коду знаходиться поле зі списком, що містить імена подій, пов'язаних з обраним у лівій частині вікна об'єктом. На малюнку 5 приведене вікно коду (програми) форми з ім'ям UserForm1, у якому розкритий список подій для командної кнопки.
Мал. 5. Вікно програми для форми UserForm1.
Загальні властивості елементів керування :
Caption - напис, відображуваний при елементі керування.
Enabled - якщо дорівнює True, то користувач може управляти елементом, у противному випадку елемент недоступний для користувача.
Name - ім'я елемента керування. При створенні елемента VBA установлює цю властивість по умовчанню. Наприклад, для першої створеної кнопки встановлюється ім'я CommandButton1, для другої - CommandButton2 і т.д. Ви можете змінити це ім'я за своїм бажанням.
ControlSource - джерело даних для елемента керування. Звичайно джерелом даних служить клітина або діапазон клітин. Елемент керування, для якого задана ця властивість, називається пов'язаним. При зміні даних в елементі керування вони відображаються в клітині і навпаки.
Крім властивостей кожний елемент керування має методи, що виконують які-небудь дії над об'єктом. Загальні методи:
Add - добавляє елемент керування під час виконання програми.
SetFocus - встановлює фокус (активізує) на елементі керування, що викликав цей метод.
Перейдемо тепер до обговорення властивостей і методів кожного з елементів керування:
Поле -елемент керування TextBox використовується для введення тексту, що у наступному використовується в програмі, або для виведення результатів роботи програми. Основні властивості:
Text - повертає текст, що утримується в поле. Наприклад, оператор
pr=TextBox1. Text
у перемінну pr поміщає значення, що користувач ввів у текстове поле. Оператор
TextBox1. Text=”Умови контракту виконані”
у вікні текстового поля відображає зазначений текст.
Multiline - припустимі значення: True -встановлюється багатостроковий режим введення тексту в поле; False -одностроковий режим.
WordWrap - припустимі значення: True - встановлюється режим автоматичного переносу слів на нову строку; False - у противному випадку.
Кнопка - елемент керування CommandButton використовується для запуску процедур при натисканні на кнопку. Основна властивість Caption - текст, відображуваний на кнопці.
Список - елемент керування ListBox застосовується для збереження списку значень, із якого користувач може вибрати одне або декілька. Обрані значення можуть використовуватися в тексті програми для обробки вибору. Властивості:
ListIndex - повертає номер обраного елемента списку. Нумерація елементів списку починається з нуля.
ControlSource - задається клітина, у якій записується значення, обране зі списку.
RowSource - задає діапазон, у якому знаходяться значення, відображувані в списку.
ListCount - повертає число елементів списку.
ColumnCount - встановлює число стовпчиків у списку.
ColumnHeads - припустимі значення: True (виводяться заголовки стовпчиків списку , що розкривається ,) і False (у противному випадку).
Value - повертає обраний елемент у списку.
Text - повертає обраний елемент у списку.
TextColumn - установлює стовпчик у списку, елемент якого встановлюється властивістю Text.
List(s1,s2) - повертає елемент списку, що розташован на перетинанні зазначених рядка s1 і стовпчика s2.
Selected - припустимі значення True (якщо елемент списку обраний) і False (у противному випадку). Використовується для визначення обраного елемента списку, якщо у властивості MultiSelect дозволений вибір декількох елементів списку.
MultiSelect - установлює засіб вибору елементів із списку. Припустимі значення:
FmMultiSelectSingle - вибір тільки одного елемента;
FmMultiSelectMulti - дозволений вибір декількох елементів за допомогою щиголя, або натисканням клавіші <Пробел>;
FmMultiSelectExtended - дозволене використання клавіші <Shift> при виборі ряду послідовних елементів списку.
Наведемо найбільш часто використовувані методи елемента керування ListBox:
AddItem елемент - метод, що додає елемент у список. Наприклад, така процедура заповнює список з ім'ям ListBox1 днями тижня:
Sub Тиждень() ListBox1. AddItem “Понеділок” ListBox1. AddItem “Вівторок” ListBox1. AddItem “Середа” ListBox1. AddItem “Четвер” ListBox1. AddItem “П'ятниця” End Sub
RemoveItem номер - метод, що видаляє елемент списку з зазначеним номером.
Поле зі списком - елемент керування ComboBox застосовується для збереження списку значень, із якого користувач може вибрати одне значення або ввести своє. Поєднує у собі функціональні можливості cписка ListBox і поля TextBox. Властивості об'єкта такі, як ListIndex, ControlSource, RowSource, Value, ListCount, Enabled, List і методи Clear, RemoveItem, AddItem аналогічні відповідним властивостям і методам списку ListBox.
Заповнити список або поле зі списком можна одним із таких засобів:
Поелементно за допомогою методу AddItem;
З діапазону, у котрий попередньо введені елементи списку. У цьому випадку у властивості RowSource записується діапазон. Це можна зробити при конструюванні форми у вікні властивостей або в програмі, написавши оператор: ListBox1. RowSource=”A1:B4”.
Продемонструємо можливості роботи зі списками на прикладі.
Приклад 5.1. Уявіть, що ви менеджер невеличкої фірми. У вас на листі Excel з ім'ям «Співробітники» зберігається список усіх співробітників фірми, і вам необхідно скласти список відпусток на якийсь місяць поточного року. Щоб справитися з цією складною роботою, ви створюєте форму і пишете до неї програму, що дозволяє вибрати пору року, потім вибрати місяць, що належить до цієї пори року, а потім відібрати співробітників фірми, що йдуть у відпустку в обраному місяці. Список відпускників поміщається на новий лист.
У формі розташовані такі елементи керування:
Рамка - Frame1, усередині якої розташовані 4 перемикача для вибору пори року - OptionButton1, OptionButton2, OptionButton3, OptionButton4. Властивості Caption цих перемикачів змінені на «Зима», «Весна», «Літо», «Осінь» відповідно.
Список , що розкривається - ComboBox1, розташований під написом «Виберіть місяць». При конструюванні список залишений порожнім. Заповнюється список у процедурах, призначених на щиголь у кожному з перемикачів. При конструюванні встановлена властивість MathRequired=True, щоб не можна було б ввести свою назву місяця, а можна було тільки вибрати зі списку.
М
ал.
6. Форма для формування списку відпускників.
Список - ListBox1. У цього елемента при конструюванні змінені такі властивості:
ColumnCount = 2 , щоб відображати в списку два стовпчики;
MultiSelect = 1(fmMultiSelectMulti) , щоб розв'язати вибір декількох елементів із списку;
RowSource = Співробітники! B3:C15 , щоб у ListBox1 відображався список співробітників, розташований на листі «Співробітники» в клітинах B3:C15.
ListStyle = 1(fmListStyleOption) , щоб перед кожним елементом у списку розташовувався прапорець і вибір елемента зі списку відповідав установці цього прапорця;
ColumnHeads = True , щоб над колонками списку були розташовані заголовки;
TextColumn = 1 , щоб властивістю Text поверталися обрані значення першого стовпчика.
Командна кнопка - CommandButton1, у якої властивість Caption замінена на «Записати відпускників». Крім того, змінена властивість Font.
Програми, пов'язані з формою:
Sub CommandButton1_Click()
‘ Ця процедура переглядає всі елементи списку ListBox1 і
‘елементи,що обрані, записує на новий лист.
‘При цьому рахується кількість виділених елементів.
Dim ks As Integer, i As Integer, k As Integer
k = 0 'Це лічильник числа відпускників
Worksheets. Add ‘додаємо новий лист
ActiveSheet. Name = "Відпускники " & ComboBox1. Value
Range("A1"). Value = "№ пп" ‘заголовки колонок
Range("B1"). Value = "Прізвище співробітника"
Range("С1"). Value = "Посада"
Range("A1:С1"). Font. Bold = True
Range("A1:С1"). Borders(xlEdgeBottom). LineStyle = xlDouble
ks = ListBox1. ListCount ‘кількість елементів у списку
For i = 0 To ks - 1 ‘цикл по всіх елементах списку
If ListBox1. Selected(i) Then ‘якщо елемент списку обраний
‘то властивість Selected(i) i-го елемента дорівнює True
k = k + 1
ActiveCell. Offset(1, 0). Select
ActiveCell. Value = k
ActiveCell. Offset(0, 1). Value = ListBox1. List(i,0) ‘записуємо прізвище
ActiveCell. Offset(0,2). Value=ListBox1. List(i,1) ‘записуємо посаду
End If
Next i
ActiveCell. Range("A1:С1"). Select
Selection. Borders(xlEdgeBottom). LineStyle = xlDouble
ActiveCell. Offset(1, 0). Select
ActiveCell. Value = "Усього йдуть у відпустку - " & k & " робітників"
Range("B1:B" & CStr(k + 1)). Select
Selection. Columns. AutoFit
Range("A1"). Select
End Sub
Private Sub OptionButton1_Click()
‘Ця процедура починає працювати, якщо обрана «Зима»
‘Формується список зимових місяців
ClearList 'виклик процедури, яка очищує список, що розкривається
ComboBox1. AddItem "Грудень"
ComboBox1. AddItem "Січень"
ComboBox1. AddItem "Лютий"
ComboBox1. Value = "Грудень" ‘активизується перший місяць
End Sub
Private Sub OptionButton2_Click()
‘Ця процедура починає працювати, якщо обрана «Весна»
‘ Формується список весняних місяців
ClearList
ComboBox1. AddItem "Березень"
ComboBox1. AddItem "Квітень"
ComboBox1. AddItem "Травень"
ComboBox1. Value = "Березень"
End Sub
Private Sub OptionButton3_Click()
‘Ця процедура починає працювати, якщо выбрано «Літо»
‘Формується список літніх місяців
ClearList
ComboBox1. AddItem "Червень"
ComboBox1. AddItem "Липень"
ComboBox1. AddItem "Август"
ComboBox1. Value = "Червень"
End Sub
Private Sub OptionButton4_Click()
‘Ця процедура починає працювати, якщо обрана «Осінь»
‘Формується список осінніх місяців
ClearList
ComboBox1. AddItem "Вересень"
ComboBox1. AddItem "Жовтень"
ComboBox1. AddItem "Листопад"
ComboBox1. Value = "Вересень"
End Sub
Sub ClearList()
‘Ця процедура очищає список, що розкриваэться від елементів,
‘ які були додані в нього раніше
Dim k As Integer, i As Integer
k = ComboBox1. ListCount ‘обчислення кількості елементів у списку
If k > 0 Then ‘якщо елементи в списку є, то
Do ‘починаємо цикл по видаленню елементів списку
ComboBox1. RemoveItem (0) ‘ видаляємо елемент списку
k = ComboBox1. ListCount
Loop While k > 0 ‘цикл, поки не видалимо всі елементи списку
End If
ComboBox1. Value = ""
End Sub
Private Sub UserForm_Initialize()
‘Ця процедура працює при відкритті форми, вона активізує ‘ ‘ лист з інформацією про співробітників фірми
Worksheets("Співробітники"). Activate
End Sub
Мал. 7. Форма в процесі роботи.
Продовжимо вивчення елементів керування у формах, їхніх властивостей і методів.
Перемикач - елемент керування OptionButton. Перемикач може бути в однім із двох станів - обраний, тоді усередині чорна точка, або ні. Перемикачі звичайно групуються за допомогою рамки (Frame) і тоді з групи перемикачів може бути обраний тільки один. При виборі такого перемикача попередній скидається. Властивості: - Caption - напис, що знаходиться поруч із перемикачем; - Value - значення, що дорівнює True, якщо перемикач обраний, і False у противному випадку.
Прапорець - елемент керування CheckButton. Властивості ті ж, що й у перемикача, але з групи прапорців можна встановлювати скільки завгодно.
Набір сторінок - елемент керування MultiPage. Цей елемент керування реалізує діалогові вікна, що складаються з кількох сторінок. Заголовки сторінок відбиваються на вкладках. Перехід від сторінки до сторінки здійснюється вибором вкладки за допомогою щиголя кнопкою миші. Об'єкт MultiPage містить у собі сімейство Pages, що є набором сторінок, що входять у цей об'єкт. Властивості об'єкта MultiPage:
Value, BoundValue - повертає номер активної сторінки. Нумерація провадиться з 0.
SelectedItem - повертає обрану сторінку.
Сімейство Pages має єдину властивість - Count, що повертає число елементів сімейства. Крім того, у сімейства Pages є такі методи:
Add - створює нову сторінку.
Clear - видаляє всі сторінки із сімейства.
Remove - видаляє сторінку із сімейства Pages.
Item - повертає сторінку з зазначеним індексом. Синтаксис:
Set Object = object. Item(індекс).
Набір вкладок - елемент керування TabStrip дозволяє створити декілька вкладок у діалоговому вікні. Містить у собі сімейство Tabs, що подає собою набір усіх вкладок. Об'єкт TabStrip і сімейство Tabs має такі ж властивості і методи, що й об'єкт MultiPage і сімейство Pages.