Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Вивчайте Вікна повідомлень та вікна введення | Взаємодія з користувачем
Excel VBA для автоматизації бізнесу

Вікна повідомлень та вікна введення

Свайпніть щоб показати меню

Перш ніж створювати повноцінну форму, варто опанувати два найпростіші способи взаємодії VBA з користувачем: MsgBox, який відображає інформацію та за потреби ставить запитання, і InputBox, який запитує короткий текст у відповідь.

MsgBox

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

MsgBox "Customer saved successfully."

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

result = MsgBox("Delete customer Urban Retail?", _
    vbYesNo + vbQuestion, "Confirm Delete")
Рисунок 5.1

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")
Рисунок 5.2

Третій аргумент, тут "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, який негайно зупиняє процедуру, замість того щоб виконувати код, що передбачає наявність коректного введення.

Завдання

  1. Написати Sub, який використовує InputBox для запиту ідентифікатора клієнта, а потім MsgBox для підтвердження "Видалити клієнта [ID]?" з кнопками Так/Ні та іконкою питання.
  2. Обробити випадки порожнього рядка (користувач натиснув Скасувати в InputBox) і випадок vbNo (користувач відмовився від підтвердження), завершивши Sub достроково з повідомленням, що нічого не відбулося.
  3. Лише якщо обидві перевірки пройдені, показати фінальний MsgBox з текстом "Тут клієнта було б видалено."
Підказка
expand arrow

1. Отримання ідентифікатора клієнта та формування підтвердження

  • InputBox потребує підказки та може приймати заголовок як другий аргумент — збережіть отримане значення у змінній типу String.
  • Повідомлення підтвердження повинно містити фактичний ID, доданий через &, а не фіксований рядок — інакше воно завжди буде виводити буквально "[ID]".
  • MsgBox, використаний як функція (для збереження результату), потребує дужок; поєднуйте vbYesNo та vbQuestion за допомогою +.

2. Обробка Скасування та Ні

  • Перевіряйте випадок порожнього рядка одразу після виклику InputBox, перш ніж формувати повідомлення підтвердження — немає сенсу питати "Видалити клієнта?", якщо немає ID.
  • Використовуйте Exit Sub для перевірки результату: у кожному випадку викликайте If з поясненням, що нічого не відбулося, а потім MsgBox.
  • Перевірка на vbNo виконується після виклику MsgBox, порівнюючи отриманий результат із vbNo.

3. Фінальне підтвердження

  • Цей рядок виконується лише якщо виконання дійшло до нього — оскільки обидві попередні перевірки використовують Exit Sub, достатньо розмістити цей MsgBox після них, щоб гарантувати його виконання лише при успіху.
Розв'язок
expand arrow
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 і натисніть Так — кожен варіант повинен показати одне з трьох різних повідомлень.

Все було зрозуміло?

Як ми можемо покращити це?

Дякуємо за ваш відгук!

Секція 5. Розділ 1

Запитати АІ

expand

Запитати АІ

ChatGPT

Запитайте про що завгодно або спробуйте одне із запропонованих запитань, щоб почати наш чат

Секція 5. Розділ 1
some-alt