Вікна повідомлень та вікна введення
Свайпніть щоб показати меню
Перш ніж створювати повноцінну форму, варто опанувати два найпростіші способи взаємодії VBA з користувачем: MsgBox, який відображає інформацію та за потреби ставить запитання, і InputBox, який запитує короткий текст у відповідь.
MsgBox
У найпростішому вигляді MsgBox просто показує повідомлення і чекає, поки користувач натисне OK:
MsgBox "Customer saved successfully."
У такому використанні — як оператор, без дужок і без збереження результату — MsgBox є кінцевою точкою: він показує повідомлення, і код продовжує виконання незалежно від дій користувача. Якщо потрібно дізнатися, яку кнопку натиснув користувач, MsgBox стає функцією замість оператора, тобто потрібні дужки і змінна для збереження результату:
result = MsgBox("Delete customer Urban Retail?", _
vbYesNo + vbQuestion, "Confirm Delete")
vbYesNo і vbQuestion додаються разом за допомогою звичайного знака +, що може здатися незвичним, але саме так VBA дозволяє поєднувати два незалежні параметри — які кнопки відображати та яку іконку показати — в єдиний другий аргумент, якого очікує MsgBox. result повертається як одна з вбудованих констант VBA, vbYes або vbNo, які насправді є прихованими числами (6 і 7, хоча ви ніколи не будете писати ці числа явно). Для виконання дії залежно від відповіді використовуйте звичайний If:
If result = vbYes Then
' proceed with deletion
End If
InputBox
На відміну від MsgBox, який завжди повертає фіксований набір констант кнопок, InputBox пропонує користувачу ввести дані та повертає саме те, що було введено:
city = InputBox("Enter a City to search for:", _
"Search Customers", "Chicago")
Третій аргумент, тут "Chicago", попередньо заповнює текстове поле — зручно для пропозиції ймовірної відповіді, яку користувач може прийняти або змінити. Є дві деталі, які легко пропустити вперше: все, що вводить користувач, повертається як String незалежно від вигляду, тобто введення 25 поверне текст "25", а не число 25, і для виконання арифметичних операцій потрібно використати CInt або CDbl; натискання Cancel не викликає помилку і не зупиняє виконання коду — просто повертається порожній рядок (""), який потрібно перевіряти окремо, якщо порожня відповідь є недопустимою.
Запити та підтвердження користувача
Комбінація обох — стандартний шаблон для будь-якої дії, що отримує введення користувача і потребує підтвердження перед виконанням ризикованої операції:
Dim searchCity As String
Dim confirmMsg As VbMsgBoxResult
searchCity = InputBox("Enter a City to search for:", "Search Customers")
If searchCity = "" Then
MsgBox "Search cancelled — no city entered."
Exit Sub
End If
confirmMsg = MsgBox("Search for customers in " & searchCity & "?", vbYesNo)
If confirmMsg = vbNo Then Exit Sub
' ... proceed with the search
Зверніть увагу, що confirmMsg оголошується як As VbMsgBoxResult, а не як загальний тип — це фактичний іменований тип, який VBA використовує для повернення значення MsgBox, і явне оголошення (замість Variant) дозволяє VBE пропонувати автозаповнення для vbYes, vbNo та інших під час введення. Перевірка на порожній рядок після InputBox і перевірка vbNo після MsgBox використовують однаковий шаблон виходу, Exit Sub, який негайно зупиняє процедуру, замість того щоб виконувати код, що передбачає наявність коректного введення.
Завдання
- Написати
Sub, який використовуєInputBoxдля запиту ідентифікатора клієнта, а потім MsgBox для підтвердження "Видалити клієнта [ID]?" з кнопками Так/Ні та іконкою питання. - Обробити випадки порожнього рядка (користувач натиснув Скасувати в InputBox) і випадок
vbNo(користувач відмовився від підтвердження), завершивши Sub достроково з повідомленням, що нічого не відбулося. - Лише якщо обидві перевірки пройдені, показати фінальний MsgBox з текстом "Тут клієнта було б видалено."
1. Отримання ідентифікатора клієнта та формування підтвердження
InputBoxпотребує підказки та може приймати заголовок як другий аргумент — збережіть отримане значення у змінній типуString.- Повідомлення підтвердження повинно містити фактичний ID, доданий через
&, а не фіксований рядок — інакше воно завжди буде виводити буквально "[ID]". MsgBox, використаний як функція (для збереження результату), потребує дужок; поєднуйтеvbYesNoтаvbQuestionза допомогою+.
2. Обробка Скасування та Ні
- Перевіряйте випадок порожнього рядка одразу після виклику
InputBox, перш ніж формувати повідомлення підтвердження — немає сенсу питати "Видалити клієнта?", якщо немає ID. - Використовуйте
Exit Subдля перевірки результату: у кожному випадку викликайтеIfз поясненням, що нічого не відбулося, а потімMsgBox. - Перевірка на
vbNoвиконується після викликуMsgBox, порівнюючи отриманий результат ізvbNo.
3. Фінальне підтвердження
- Цей рядок виконується лише якщо виконання дійшло до нього — оскільки обидві попередні перевірки використовують
Exit Sub, достатньо розмістити цейMsgBoxпісля них, щоб гарантувати його виконання лише при успіху.
Option Explicit
Sub DeleteCustomerPrompt()
Dim customerID As String
Dim confirmResult As VbMsgBoxResult
' Step 1 — ask for the Customer ID
customerID = InputBox("Enter the Customer ID to delete:", "Delete Customer")
' Step 2a — handle Cancel / empty input
If customerID = "" Then
MsgBox "Cancelled — no Customer ID was entered. Nothing happened."
Exit Sub
End If
' Step 1 (continued) — confirm with Yes/No
confirmResult = MsgBox("Delete customer " & customerID & "?", _
vbYesNo + vbQuestion, "Confirm Delete")
' Step 2b — handle No
If confirmResult = vbNo Then
MsgBox "Cancelled — deletion was not confirmed. Nothing happened."
Exit Sub
End If
' Step 3 — both checks passed
MsgBox "Customer would be deleted here."
End Sub
Запустіть макрос (F5) і спробуйте всі три варіанти: натисніть Скасувати у InputBox, натисніть Ні у підтвердженні, а потім введіть ID і натисніть Так — кожен варіант повинен показати одне з трьох різних повідомлень.
Дякуємо за ваш відгук!
Запитати АІ
Запитати АІ
Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат