Елемент управління CommandButton
Елемент управління CommandButton (кнопка) - найпоширеніший елемент управління на формах. У більшості форм обов'язково буде, принаймні, дві кнопки: OK і Відміна (Cancel). При натисканні кнопки OK повинно виконатися ту дію, заради чого створювалася форма, після натискання кнопки Скасувати форма повинна закритися. Ваша задача - забезпечити необхідний код для цих кнопок, який і буде виконувати ці дії. Далі представлені найбільш важливі властивості кнопки.
Cancel - якщо для цієї властивості встановити значення True, то кнопка буде натискатися автоматично при натисканні клавіші <Esc>. Як правило, на такі кнопки поміщаються написи типу "Скасувати", "Вихід", "Повернутися у вікно програми". Однак, крім призначення клавіші <Esc>, властивість нічого більше цій кнопці не дає. Необхідно ще додати код в обробник події Click, наприклад:
Private Sub CommandButton1_Click ()
Unload Me
End Sub
Me - це спеціальне зарезервоване слово, яке представляє поточний об'єкт (в даному випадку форму). Його можна використовувати замість імені форми.
Caption - напис, який буде на кнопці.
Default - якщо це властивість встановлено в True, то така кнопка буде вважатися натиснутою при натисканні користувачем клавіші <Enter>, навіть якщо фокус знаходився в іншому місці форми (але не на інший кнопці). Зазвичайно такі кнопки є головними, за якими виконується дія, заради якої створювалася форма (друк звіту, занесення інформації в базу даних, відправлення пошти і т. д.).
Picture - якщо простий напис вас не влаштовує, можна призначити кнопці малюнок (піктограму).
TakeFocusOnClick - визначає, чи буде передаватися управління цій кнопці при натисканні на неї. За замовчуванням встановлено True.
Головна подія для кнопки - це, звичайно, Click. Як правило, до цього і прив'язується програмний код, заради якого створювалася кнопка.
Елементи управління ScrollBar і SpinButton
Смуги прокрутки (ScrollBars) найчастіше зустрічаються в текстових полях, коли введений текст повністю на екрані не поміщається. Однак нічого не заважає вам використовувати ScrollBar як окремий елемент управління (користувачі часто називають його "повзунок") для вибору якогось значення з діапазону. Зазвичай такий елемент управління використовується для вибору плавно змінюваних значень, наприклад: рівня гучності, яскравості, стиснення, пріоритету і т. д.
Головна подія для ScrollBar - вже знайоме нам Change. Головні властивості в цього елементу управління представлені далі.
Max і Min - максимальне і мінімальне значення, які можна задати за допомогою цього елемента керування. Можливий діапазон - від -32 767 до +32 767. При цьому максимальне значення може бути і менше мінімального - просто повзунок доведеться тягнути у зворотний бік.
LargeChange і SmallChange - визначають, якими кроками буде рухатися повзунок при переміщенні його користувачем (шляхом клацання на смузі близько повзунка або при натисканні на одну з кнопок напрямку відповідно).
Orientation - визначає розташування повзунка (вертикальне чи го-різонтального). За замовчуванням для цієї властивості встановлено значення 1, т. бт. орієнтація визначається автоматично в залежності від конфігурації відведеного елементу управління простору на формі (що більше - довжина чи висота). Проте за допомогою цієї властивості можна і явно вказати вертикальне чи горизонтальне розташування повзунка.
ProportionalThumb - визначає розмір повзунка: чи буде він пропор-ціонален розміром смуги прокрутки (за замовчуванням) або буде фіксовано-ванного розміру.
Value - головна властивість цього елемента керування. Визначає положення повзунка і те значення, яке буде повертати цей елемент управління програмою. Як правило, використання повзунка без відображення обраної при допомозі його інформації не дуже вітається користувачами. У найпростішому варіанті те, що вибрано за допомогою повзунка, слід просто відображати в текстовому надпису:
Private Sub ScrollBar1_Change ()
Label1.Caption = ScrollBar1.Value
End Sub
У більш складному варіанті користувачеві можна вибирати - чи використовувати повзунок або вводити значення в текстовому полі. В цьому випадку в події Change для текстового поля необхідно передбачити перевірку вводимих користувачем значень і зворотний зв'язок з повзунком.
Елемент управління лічильник (SpinButton) - це та ж смуга прокрутки, позбавлена самої смуги і повзунка. SpinButton використовується в тих ситуаціях, коли діапазон обираних значень зовсім невеликий (наприклад, треба вибрати кількість копій для друку звіту). Всі властивості, які є у SpinButton, збігаються з властивостями ScrollBar.
Елементи управління TabStrip і MultiPage
Набір вкладок (TabStrip) і набір сторінок (MultiPage) застосовуються в одній і тій же ситуації - коли елементів управління занадто багато, щоб вмістити їх на одній сторінці форми. Ці елементи управління дозволяють створювати на формі кілька вкладок (сторінок), між якими зможе переходити користувач. Принципова відмінність між цими елементами управління полягає в тому, що на вкладках TabStrip завжди розташовують-ся однакові елементи управління, а на MultiPage - різні. Застосування множини вкладок ви напевно бачили в багатьох програмах (наприклад, в Word у вікні Параметри, що відкривається за допомогою меню Сервіс | Пара-метри).
Елемент TabStrip використовується рідше. Наприклад, його можна застосувати для занесення даних за одним шаблоном для філій або співробітників (якщо їх не надто багато). Властивості та події у цих елементів управління практично ідентичні. Найчастіше використовуються такі властивості.
MultiRow - визначає, чи можна використовувати кілька горизонталь-них рядів вкладок.
TabOrientation - визначає, де будуть розташовані заголовки вкладок (за замовчуванням вгорі).
Value - номер вкладки, яка відкрита у даний момент (нумерація починається з 0).
Головна подія цих елементів управління - Change (тобто перехід між вкладками). До нього можна прив'язати, наприклад, перевірку вже введених користувачем значень або виведення попереджень.
Елемент управління Image
Напевно, малюнок (Image) - це найпростіший з елементів управління. Він дозволяє відобразити на формі малюнок в одному з поширених фор-матів, який буде реагувати на клацання мишею (а може просто використовуватися для прикраси форми). Зазначимо деякі моменти, пов'язані з застосуванням елемента управління Image:
в якості альтернативи можна використовувати властивість Picture форми (особливо якщо вам потрібен фоновий малюнок для всієї форми);
ще дві альтернативи - це властивість Picture елементів управління Label або CommandButton. Функціональність малюнків виходить практично однакова;
при використанні цього елемента керування саме зображення копіюється всередину документа і зовнішній його файл більше не потрібний. Головні властивості цього елемента управління представлені далі.
Picture - дозволяє вибрати саме зображення для форми.
PictureAlignment - дозволяє вибрати місцезнаходження зображення у відведеній йому області. За замовчуванням малюнок розташовується по центру.
PictureSizeMode - дозволяє вибрати режим розтягування або зменшення елемента у випадку, якщо він не відповідає розміру області. PictureTiling - визначає, розмножувати чи маленький малюнок, щоб він покрив всю відведену йому область ("замостити"). Головна подія елемента управління Image - Click.
Робота з елементами управління
Підготовка:
Створіть нову книгу Excel и збережіть її Як Prikaz.xls. Заповніть комірки з A1 по A5 значеннями, аналогічними подання на рис.5.12. Дані про співробітників кращє ввести в родовому відмінку, оскільки ці значення будуть підставлятися в автоматично створюваний наказ у форматі документаWord.
2. Відкрийте редактор Visual Basic и у вікні Project Explorer клацніть пра-вою кнопкою миші по об'єкту Ця книга и в контекстному меню виберіть View Code.
3. У вікні редактора коду для цієї книги введіть Наступний код:
'При відкрітті робочої книги показуємо форму UF1
Private Sub Workbook_Open ()
UF1.Show
End Sub
'Спеціальна процедура, Яка друкує наказ у Word
Public Sub DocWrite (sPovod As String, sFio As String, bFlagPremia As Boolean, bFlagGramota As Boolean, nSummaPremii As Long, sOtvIsp As String)
Dim oWord As Word.Application
Dim oDoc As Word.Document
Set oWord = CreateObject ("Word.Application")
Set oDoc = oWord.Documents.Add ()
oWord.Visible = True
oDoc.Activate
With oWord.Selection
.TypeText "Наказ"
.Style = "Заголовок 1"
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.TypeText vbCrLf
.Style = "Звичайний"
.TypeText vbCrLf
.TypeText "м.Санкт-Петербург" & Space (90) & Date
.TypeText vbCrLf
.TypeText vbCrLf
.TypeText "За проявлені успіхі в" & sPovod & _
"Нагородити" & sFio & ":"
.TypeText vbCrLf
If bFlagPremia Then
.TypeText vbTab & "- грошовою премією в сумі" & _
nSummaPremii & "гривень"
End If
If bFlagGramota Then
.TypeText vbCrLf
.TypeText vbTab & "- Почесна грамота."
Else
.TypeText "."
End If
.TypeText vbCrLf
.TypeText vbCrLf
.TypeText vbCrLf
.TypeText vbCrLf
.TypeText "Генеральний директор" & vbTab & vbTab & _
vbTab & "Іванов І. І."
.ParagraphFormat.Alignment = wdAlignParagraphCenter
.TypeParagraph
.TypeText vbCrLf
.TypeText vbCrLf
.ParagraphFormat.Alignment = wdAlignParagraphLeft
.TypeText Text: = ("Отв. Виконавець" & sOtvIsp)
.TypeParagraph
End With
End Sub
У вікні Project Explorer клацніть правою кнопкою миші на проекті Prikaz.xls и в контекстному меню виберіть Insert | UserForm. Віділіть створений вами об'єкт форми і натісніть клавішу <F4>. У вікні Properties введіть для Властивості Name цієї форми значення UF1.
Помістіть на форму з Toolbox єдину кнопку - елемент управління CommandButton1. Встановіть для цієї кнопки Значення Властивості Caption як "Надрукувати наказ" (без лапок) i змініть розміри і місценахождення цієї кнопки.
Клацніть правою кнопкою миші по кнопці CommandButton1 на вашій формі, в контекстному меню виберіть View Code и додайте в код подвійної процедури для Події Click цієї кнопки Наступний код:
Private Sub CommandButton1_Click ()
Dim sPovod As String
Dim sFio As String
Dim bFlagPremia As Boolean
Dim bFlagGramota As Boolean
Dim nSummaPremii As Long
Dim sOtvIsp As String
'Підставіті дані з форми
sPovod = "освоєння нових інформаційних технологій"
sFio = "Іванова Івана Івановича"
bFlagPremia = True
bFlagGramota = True
nSummaPremii = 100000
sOtvIsp = "Петрова П. П."
'Кінець підстановки даних
Call ЕтаКніга.DocWrite (sPovod, sFio, bFlagPremia, bFlagGramota, _
nSummaPremii, sOtvIsp)
End Sub
6. Запустіть вашу форму на виконання и Переконайся, Що вона працює: виводячи створюваний документ Word наказ з фіксованими значеннями.
ЗАВДАННЯ:
Змініть форму так, щоб замість присвоєння змінним у виділеному коментарями блоці заздалегідь визначених значень користувач міг вибирати дані за допомогою форми. При цьому:
1. Значення змінної sPovod повинне вибиратися з трьох можливих значень: "освоєння нових інформаційних технологій", "впровадженні нових програмних продуктів" і значення, яке користувач може ввести через текстове поле. Використовуйте для цього набір з трьох переключате-лей і текстове поле (воно має бути заховане, якщо користувач вы-брал один з перших двох перемикачів). За умовчанням повинно под-ставляться "освоєнні нових інформаційних технологій".
2. Значення змінної sFio повинне вибиратися користувачем за допомогою комбінованого списку. У цей комбінований список повинні ав-томатически поміщатися значення з усіх непорожніх осередків стовпця A лис-та Excel. За умовчанням повинне вибиратися значення "Іванова Івана Івановича".
3. Значення змінних bFlagPremia і bFlagGramota повинні встановлюватися залежно від стану двох прапорців — "Премія" і "Грамота". За умовчанням обидва прапорці мають бути встановлені. Якщо користувач зняв обидва прапорці, то йому повинно виводитися застережливе повідомлення "Не вибрана ні премія, ні почесна грамота"! з відміною виведення документа.
4. Користувач повинен мати можливість задавати значення змінної nSummaPremii або за допомогою смуги прокрутки з діапазоном значень
від 0 грн. до 100 000 грн., або за допомогою текстового поля. Якщо прапорець "Премія" знятий, то смуга прокрутки і текстове поле мають бути сховані від користувача.
Хід смуги прокрутки (збільшення або зменшення значення при клацанні на кнопках із стрілками) має дорівнювати 100 грн.
За умовчанням розмір премії має дорівнювати 100 грн.
5. Помістіть на форму ще одну кнопку Відміна. Ця кнопка повинна закривати поточну форму і спрацьовувати при натисненні клавіші <Esc>.
6. У заголовку форми повинне виводитися значення "Формування наказу про виплату премії".
Відповідь до завдання
До пункту 1 завдання (робота з перемикачами і текстовим полем) :
1. У вікні Project Explorer двічі клацніть мишею по об'єкту форми UF1. Потім в ToolBox клацніть по об'єкту Label і відведіть місце цьому елементу управління у верхній частині форми. Клацніть правою кнопкою миші по створеному елементу управління Label1 і в контекстному меню виберіть Properties. Змініть значення властивості Caption на "За що:" і за допомогою властивості Font підберіть відповідний шрифт і його розмір.
У ToolBox клацніть по елементу управління OptionButton і відведіть на формі місце цьому елементу управління. Повторіть цю операцію ще двічі.
3. Відкрийте властивості першого перемикача. Змініть значення властивості Name на optOsvoenie, а значення властивості Caption — на "освоєння нових інформаційних технологій". Для другого перемикача поміняйте значення властивості Name на optVnedrenie і властивість Caption — на "впровадження нових програмних продуктів", для третього — на optDrugoe і "інше:" відповідно.
4. У ToolBox клацніть по елементу управління TextBox і помістіть його в потрібне місце форми. Встановіть для властивості Name цього елементу управліния значення txtDrugoe.
5. Клацніть правою кнопкою миші по порожньому місцю на формі і в контекстному меню вибрати View Code. У списку подій у верхній частині вікна редактора коду виберіть подію Initialize для UserForm і введіть для нього наступний код:
optOsvoenie.Value = True
txtDrugoe.Visible = False
6. Для події Change перемикача optDrugoe введіть наступний код:
If optDrugoe.Value = True Then
txtDrugoe.Visible = True
Else
txtDrugoe.Visible = False
End If
7. Перейдіть до коду події Click для CommandButton1 і замість рядка:
sPovod = "освоєння нових інформаційних технологій"
введіть наступний код:
If optOsvoenie.Value = True Then sPovod = _
"освоєння нових інформаційних технологій"
If optVnedrenie.Value = True Then sPovod = _
"впровадження нових програмних продуктів"
If optDrugoe.Value = True Then sPovod = txtDrugoe.Value
8. Запустіть форму на виконання, надрукуйте наказ і переконайтеся, що усе працює згідно з поставленими умовами.
До пункту 2 завдання (робота з комбінованим списком) :
1. Розмістіть на формі ще один елемент управління Label з написом "Кого:" і настройте для нього шрифт.
2. Клацніть в Toolbox по елементу управління ComboBox і виділіть для нього місце на формі. Присвойте створеному елементу управління ComboBox ім'я cbFIO.
3. Відкрийте код для події Initialize форми UserForm і доповните його наступними рядками:
Dim oColumn As Range
Dim oCell As Range
Set oColumn = Columns("A")
For Each oCell In oColumn.Cells
If oCell.Value <> "" Then
cbFIO.AddItem oCell.Value
End If
Next
cbFIO.ListIndex = 0
4. Перейдіть до коду події Click для CommandButton1 і замість рядка:
sFio = "Іванова Івана Івановича"
введіть наступний код:
sFio = cbFIO.Value
5. Запустите форму на виконання і переконаєтеся, що усе працює нормально.
До пункту 3 завдання (робота з прапорцями) :
1. За допомогою ToolBox помістите на форму два елементи управління CheckBox. Для першого елементу властивості Name присвойте значення chPremia і для властивості Caption — значення "Премія", для другого — chGramota і "Почесна грамота" відповідно.
2. Відкрийте код події Initialize форми UserForm і доповните його сле-дующими рядками:
chPremia.Value = True
chGramota.Value = True
3. Перейдіть до коду події Click для CommandButton1 і замість рядків:
bFlagPremia = True
bFlagGramota = True
введіть наступний код:
bFlagPremia = chPremia.Value
bFlagGramota = chGramota.Value
If bFlagPremia = False And bFlagGramota = False Then
MsgBox "Не вибрана ні премія, ні почесна грамота"!
Exit Sub
End If
4. Запустіть форму на виконання і переконайтеся, що усе працює нормально.
До пункту 4 завдання (застосування смуги прокрутки і дублюючого текстового поля) :
1. Помістіть на форму ще один елемент управління Label з написом "Сума премії :". Присвойте його властивості Name значення lblSum.
2. Помістіть поруч текстове поле і присвойте його властивості Name значення txtSum.
3. Розмістіть під текстовим полем елемент управління ScrollBar і присвойте наступні значення його властивостям:
• Name — значення sbSum;
• Min — значення 0;
• Max — значення 100 000;
• SmallChange — значення 100.
4. Для події Change елементу управління sbSum введіть наступний код:
txtSum.Value = sbSum.Value
5. Для події Change елементу управління txtSum введіть наступний код:
sbSum.Value = CLng(txtSum.Value)
6. Для події Initialize нашої форми UserForm додайте наступний код:
sbSum.Value = 100
txtSum.Value = 100
7. Для події Change елементу управління chPremia додайте наступний код:
If chPremia.Value = False Then
lblSum.Visible = False
txtSum.Visible = False
sbSum.Visible = False
Else
lblSum.Visible = True
txtSum.Visible = True
sbSum.Visible = True
End If
8. Для коду Click кнопки CommandButton1 замість коду:
nSummaPremii = 100000
впишіть код:
nSummaPremii = sbSum.Value
9. Запустіть форму на виконання і переконаєтеся, що усе працює нормально.
До пункту 5 завдань (застосування кнопки) :
1. Розмістіть на полі ще одну кнопку і налаштуйте значення її властивостей наступним чином : • Name — значення btnEscape;
• Caption — значення "Відміна";
• Cancel — значення True.
2. Для події Click цієї кнопки помістите код
Unload Me
До пункту 6 завдань (зміна заголовка форми) :
1. Клацніть правою кнопкою миші по порожньому місцю на формі і в контекстному меню виберіть Properties.
2. Для властивості Caption налаштуйте значення "Формування наказу про виплату премії".
3. Запустите форму на виконання і переконаєтеся, що накази друкуються правильно.