Виведення чисел з порядковим роздільником msgbox vba. Створення власних діалогових вікон засобами VBA

Функція MsgBox дозволяє виводити інформаціюна екран у вигляді вікна.

Загальний вигляд функцій:

MsgBox повідомлення

[,код кнопки [,заголовок]]

повідомлення – визначає значення виразу, який виводитиметься у вікні повідомлення. Цей вираз може бути текстом, який потрібно взяти в лапки, та (або) змінною. Для виведення в одному вікні тексту повідомлень та значення змінної слід використовувати операцію об'єднання рядків (&).

Dim Pi As Single

MsgBox "pi=" & Pi

Результат роботи макросу:

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

заголовок – містить текст, який відображається у рядку заголовка повідомлення. Якщо цей аргумент не заданий, у заголовок міститься рядок MicrosoftExcel.

Dim Pi As Single

MsgBox Pi, "Це число Pi"

Введення інформаціїу VBA можна здійснити за допомогою вікна введення:

Функція InputBoxстворює вікно введення:

InputBox(повідомлення

[, заголовок [, значення]])

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

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

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

ЗАВДАННЯ 2. Кут заданий у радіанах. Виконати переклад у градусну міру.

Const pi = 3.14159

Dim g As Integer

Dim m As Integer

Dim s As Integer

r = InputBox("r=", "Величина кута в радіанах", pi/4)

g = Fix (r * 180 / pi)

m = Fix((r*180/pi-g)*60)

s=Fix(((r*180/pi-g)*60-m)*60)

MsgBox g & " градусів" & m & " хвилин" & s & " секунд"

18. Умовний оператор

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

Умовний оператор,відповідний наведеній блок-схемі, має вигляд:

If вираз Then

оператор1

оператор2

У цій конструкції вираз повинен мати логічний тип.

Працює оператор так. Обчислюється значення виразу. Якщо воно має значення true, виконується оператор1, інакше (вираз має значення false) – оператор2.

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

Умовний операторв цьому випадку має конструкцію:

If вираз Then

оператор

Цей запис можна назвати "перепустка оператора else".

Тут оператор або виконується, або пропускається залежно від значення виразу.

Допускаються багаторазово вкладені оператори If...Then...Else, що мають стільки рівнів вкладення, скільки потрібно.

If вираз1 Then

оператори1

Elseif вираз2 then

оператори2

Elseif вираз3 then

оператори3

Elseif виразN then

операториN

оператори

Для полегшення читання програми замість багаторазово вкладених операторів, іноді краще використовувати оператор Select Case

Select Case<вираз>

Case<умова вибору 1>

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

Case<умова вибору 2>

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

……………..

Case<умова виборуN>

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

<оператори>

19. Приклади програм

ЗАВДАННЯ 3 . Відомі коефіцієнти а, b і з квадратного рівняння ax 2 +bx+c=0. Обчислити коріння квадратного рівняння.

Вхідні дані: a, b, c.

Вихідні дані: х 1 , х 2 .

Sub prim7()

Dim x1 As Single

Dim x2 As Single

InputBox("A=","Коефіцієнти квадратного рівняння", 2)

InputBox("B="," Коефіцієнти квадратного рівняння", 3)

InputBox("C=","Коефіцієнти квадратного рівняння",-2)

d = b ^ 2 - 4 * a * c

If d< 0 Then

MsgBox "Дійсних рішень немає", vbCritical

x1=(-b+Sqr(d))/(2*a)

x2=(-b-Sqr(d))/(2*a)

MsgBox "X1=" & x1 & Chr(13) & "X2=" & x2, vbInformation

ЗАВДАННЯ 4.Дано дійсне число x. Для функції, графік якої наведено нижче обчислити y=f(x).

If x<= -1 Then

ElseIf x > 1 Then

ЗАВДАННЯ 5. Дано дійсні числа xі y. Визначити чи належить точка з координатами ( x; y) заштрихованої частини площини.

Крапка з координатами ( x;y) належить заштрихованій частині площини, якщо:

If y<= 2 * x + 2 And

У цій статті ви навчитеся створювати вікно повідомлення в VBA Excel, яке може відображати різну інформацію.

Функція MsgBoxвідображає вікно повідомлення та чекає, коли користувач натисне кнопку, а потім дія буде виконана на основі кнопки, натиснутою користувачем.

Синтаксис

MsgBox(prompt[,buttons][,title][,helpfile,context])

Параметр Опис

  • Запит – обов'язковий параметр. Рядок, що відображається у вигляді повідомлення у діалоговому вікні. Максимальна довжина запрошення – близько 1024 символів. Якщо повідомлення розповсюджується більш ніж на один рядок, рядки можуть бути розділені за допомогою символу повернення каретки (Chr (13)) або символу перекладу рядка (Chr (10)) між кожним рядком.
  • Кнопки – необов'язковий параметр. Числовий вираз, який вказує тип кнопок, стиль значка для використання, ідентифікатор кнопки за замовчуванням і модальність вікна повідомлення. Якщо залишити порожнім, значення за промовчанням для кнопок дорівнює 0.
  • Заголовок – необов'язковий параметр. Рядковий вираз відображається у рядку заголовка діалогового вікна. Якщо заголовок залишено порожнім, ім'я програми міститься в рядку заголовка.
  • Файл довідки – необов'язковий параметр. Вираз String, який ідентифікує файл довідки, який використовуватиметься для надання контекстно-залежної довідки для діалогового вікна.
  • Контекст – необов'язковий параметр. Числовий вираз, який ідентифікує номер контексту довідки, наданий автору довідки, у відповідний розділ довідки. Якщо контекст надано, також має бути наданий довідковий файл.

Параметр Buttons може набувати будь-якого з наступних значень:

  • 0 vbOKOnly – відображає лише кнопку OK.
  • 1 vbOKCancel – відображає кнопки «ОК» та «Скасувати».
  • 2 vbAbortRetryIgnore – відображає кнопки скасування, повтору та ігнорування.
  • 3 vbYesNoCancel - відображає кнопки «Так», «Ні» та «Скасувати».
  • 4 vbYesNo - відображає кнопки «Так» та «Ні».
  • 5 vbRetryCancel - відображає кнопки повтору та скасування.
  • 16 vbCritical - відображає піктограму критичного повідомлення.
  • 32 vbQuestion - відображає піктограму попередження.
  • 48 vbExclamation - відображає піктограму попереджувального повідомлення.
  • 64 vbІнформація. Відображає піктограму інформаційного повідомлення.
  • 0 vbDefaultButton1 – перша кнопка за замовчуванням.
  • 256 vbDefaultButton2 – друга кнопка за замовчуванням.
  • 512 vbDefaultButton3 - Третя стандартна кнопка.
  • 768 vbDefaultButton4 - четверта кнопка за замовчуванням.
  • 0 vbApplicationModal Application modal - поточна програма не буде працювати, поки користувач не відповість на повідомлення.
  • 4096 vbSystemModal System modal - всі програми не працюватимуть, поки користувач не відповість на повідомлення.

Вищезазначені значення логічно розділені на чотири групи: перша група (від 0 до 5) вказує кнопки, які відображатимуться у вікні повідомлення. Друга група (16, 32, 48, 64) описує стиль значка, який відображатиметься, у третю групу (0, 256, 512, 768) вказує на те, яка кнопка має бути за замовчуванням, а четверту групу (0, 4096) визначає модальність вікна повідомлення

Значення, що повертаються

Функція MsgBox може повертати одне з таких значень, яке може використовуватися для ідентифікації кнопки, яку користувач натиснув у вікні повідомлення.

  • 1 – натиснута кнопка vbOK – OK.
  • 2 - vbCancel - натиснута кнопка Скасувати
  • 3 - vbAbort - натиснута кнопка Abort
  • 4 - vbRetry - натиснута кнопка Retry
  • 5 - vbIgnore - натиснута кнопка Ignore
  • 6 - vbYes - натиснута кнопка «Так»
  • 7 - vbNo - Ні клацання

Sub MessageBox_Demo() "Просте повідомлення MsgBox ("Привіт") "Повідомлення з заголовком і кнопками так, немає і скасування a = MsgBox("Вам подобається синій колір", 3, "Виберіть відповідь") "Код натиснутої кнопки MsgBox ("Значення відповіді " & a) End Sub

MsgBox по кроках

Крок 1 - Вказана функція може бути виконана або натисканням кнопки «Виконати» у вікні VBA, або натисканням на кнопку, яку Ви самі додали на лист Excel.

Крок 2 - Проста текстова скринька відображається з повідомленням «Ласкаво просимо» та кнопкою «ОК»

У цій статті Ви навчитеся створювати поле введення в VBA Excel - InputBox, до якого можна вносити різноманітну інформацію для обчислень.

Функція InputBoxпропонує користувачам ввести значення. Після введення значень, якщо користувач натискає кнопку OK або натискає ENTER на клавіатурі, функція InputBox повертає текст до текстового поля. Якщо натиснути кнопку «Скасувати», функція поверне порожній рядок («»).

Синтаксис

InputBox(prompt[,title][,default][,xpos][,ypos][,helpfile,context])

Параметр Опис

  • Запит - потрібний параметр. Рядок, що відображається у вигляді повідомлення у діалоговому вікні. Максимальна довжина запрошення – близько 1024 символів. Якщо повідомлення розповсюджується більш ніж на один рядок, рядки можуть бути розділені за допомогою символу повернення каретки (Chr (13)) або символу перекладу рядка (Chr (10)) між кожним рядком.
  • Заголовок – необов'язковий параметр. Рядковий вираз відображається у рядку заголовка діалогового вікна. Якщо заголовок залишено порожнім, ім'я програми міститься в рядку заголовка.
  • За замовчуванням – необов'язковий параметр. Текст за промовчанням у текстовому полі, яке користувач хотів би відобразити.
  • XPos – необов'язковий параметр. Положення осі X є приблизною відстанню від лівої сторони екрана по горизонталі. Якщо поле залишити порожнім, поле введення буде розташовуватися по горизонталі.
  • YPos – необов'язковий параметр. Положення осі Y є приблизною відстанню від лівої сторони екрана по вертикалі. Якщо залишити порожнім, поле введення буде централізоване вертикально.
  • Файл довідки – необов'язковий параметр. Рядковий вираз, який ідентифікує файл довідки, який буде використовуватися для надання контекстно-залежної довідки для діалогового вікна.
  • context - Необов'язковий параметр. Числовий вираз, який ідентифікує номер контексту довідки, наданий автору довідки, у відповідний розділ довідки. Якщо контекст надано, також має бути наданий довідковий файл.

приклад

Обчислимо площу прямокутника, отримавши значення від користувача під час виконання за допомогою двох полів введення (один для довжини та один для ширини).

Function findArea() Dim Length As Double Dim Width As Double Length = InputBox("Введіть довжину", "Введіть число") Width = InputBox("Введіть ширину", "Введіть число") findArea = Length * Width End Function

Поле введення InputBox на кроки

Крок 1 - Щоб виконати те саме, викличте за допомогою імені функції та натисніть Enter, як показано на наступному знімку екрана.

Крок 2 - Після виконання з'явиться перше поле введення (довжина). Введіть значення у полі введення.

Виведення (передача користувачеві) результатів роботи програми та інших повідомлень здійснюється через діалогове вікно повідомлень.

Для організації виведення інформації використовується вбудована функція MsgBox.

Розглянемо варіанти її застосування.

1. y = Sqr(16)

MsgBox y

2. S = 99

MsgBox (“S= ” & S)

це знак конкатенаціїамперсанд;

застосовується для об'єднання кількох рядків в один

3. a = 5: b = 101

MsgBox ("a="& a & " " & "b=" &b)

4. MsgBox("a=" & a & Chr(13) & "b=" & b)

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

на новий рядок(перетворює число на символ)

Робота з об'єктами Excel

Об'єктна модель Excelє ієрархією об'єктів, підпорядкованих одному об'єкту Application, який відповідає самому удодатку Excel. Об'єктами Excelє робочі книжки, робочі листи, діаграми, діапазони осередків, осередки тощо.

VBA може програмно керувати будь-яким із цих об'єктів.

Кожен об'єктволодіє набором властивостей, методіві подій.

Властивість– це характеристика чи параметр об'єкта.

Метод- Це дія, яка може виконувати об'єкт.

Подія- Це дія, на яку об'єкт реагує автоматично.

Керувати об'єктом уVBAможна 3 шляхами:

    змінюючи властивості об'єкта;

    активізуючи метод, пов'язаний із об'єктом;

    визначаючи процедуру, запуск якої відбудеться як відгук на подію.

Виведення інформації в комірку Excel

Осередок як об'єкт Excel у VBA-програмі позначається Cells(i, j), де i- номер рядка, j- Номер стовпця електронної таблиці.

Y

Значення Yбуде виведено на активний аркуш робочої книги Excel у комірку B3

= 0.01

Cells(3, 2) = Y

З

Змінною Bбуде надано значення,

яке зберігається в осередку С5

(т. е. вміст комірки С5)

читання інформації з комірки Excel

B = Cells (5, 3)

Засіб vba для введення інформації

Введення інформації від користувача здійснюється через діалогове вікно введення. Реалізується за допомогою вбудованої функції InputBox.

Dim x As Single

x = Val (InputBox ("Введіть x"))

Функція InputBoxповертає послідовність символів, введену в поле введення ( 15 ) як дані типу String(рядковий). Вбудована функція Val()перетворює рядкове значення з поля введення на числове.

Лінійні обчислювальні процеси

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

Приклад 1Обчислити значення функції

при k = 33,5 x = 17

1. Складемо алгоритм розв'язання задачі.

2. У вікні редактора коду введемо програмний код:

Option Explicit

Sub Лінійний_процес ()

Dim k As Single, x As Single, y As Single'оголошення змінних

x = Val (InputBox ("Введіть значення x"))

y = k * Exp(Sin(x))

MsgBox "y=" & y' виведення результату у діалогове вікно

End Sub

Команда Option Explicitзобов'язує оголошувати всі змінні у цій програмі. Може розміщуватись лише у розділі оголошень модуля.

У цій замітці описуються методи створення власних діалогових вікон, які істотно розширюють стандартні можливості Excel. Діалогові вікна - це найважливіший елемент інтерфейсу користувача в Windows. Вони застосовуються практично в кожному додатку Windows, і більшість користувачів непогано уявляють, як вони працюють. Розробники Excel створюють користувацькі діалогові вікна за допомогою форм користувача (UserForm). Крім того, VBA є кошти, що забезпечують створення типових діалогових вікон.

Мал. 1. Робота процедури GetName

Завантажити замітку у форматі або , приклади в

Перед тим, як приступити до вивчення тонкощів створення діалогових вікон на основі власних форм, слід навчитися використовувати деякі вбудовані інструменти Excel, призначені для виведення діалогових вікон.

Використання вікон введення даних

Вікно введення даних- це просте діалогове вікно, що дозволяє користувачеві ввести одне значення. Наприклад, можна застосувати вікно введення даних, щоб надати користувачеві можливість ввести текст, число або діапазон значень. Для створення вікна введення призначені дві функції InputBox: одна - у VBA, а друга є способом об'єкта Application.

Функція InputBox у VBA

Функція має наступний синтаксис:

InputBox(запит [, заголовок] [, за замовчуванням] [, xpos] [, ypos] [, довідка, розділ])

  • xpos, ypos. Визначають координати лівого верхнього кута вікна введення на екрані (необов'язкові параметри).

Функція InputBox запитує у користувача одне значення. Вона завжди повертає рядок, тому результат потрібно буде перетворити на числове значення. Текст, що відображається у вікні введення, може досягати 1024 символів (довжину дозволяється змінювати залежно від ширини символів, що використовуються). Якщо визначити розділ довідкової системи, то у діалоговому вікні буде відображено кнопку Довідка.

Процедура GetName запитує у користувача повне ім'я (ім'я та прізвище). Потім програма виділяє ім'я та відображає привітання у вікні повідомлення (див. мал. 1; код функції можна знайти у файлі VBAinputbox.xlsm).

Sub GetName() Dim UserName As String Dim FirstSpace As Integer Do Until UserName<>"" UserName = InputBox("Вкажіть ім'я та прізвище: ", _ "Назвіть себе") Loop FirstSpace = InStr(UserName, " ") If FirstSpace<>0 Then UserName = Left(UserName, FirstSpace - 1) End If MsgBox "Привіт" & UserName End Sub

Sub GetName ()

Dim UserName As String

Dim FirstSpace As Integer

Do Until UserName<> ""

UserName = InputBox ( "Вкажіть ім'я та прізвище: ", _

"Назвіть себе")

Loop

FirstSpace = InStr (UserName , " " )

If FirstSpace<>0 Then

UserName = Left (UserName , FirstSpace - 1 )

End If

MsgBox "Привіт" & UserName

End Sub

Зверніть увагу: функція InputBox викликається у циклі Do Until. Це дозволяє переконатися, що дані введені у вікно. Якщо користувач клацне на кнопці Відмінаабо не введе текст, змінна UserName міститиме порожній рядок, а вікно введення даних з'явиться повторно. Далі в процедурі буде спроба отримати ім'я користувача шляхом пошуку першого символу пробілу (для цього застосовується функція InStr). Таким чином, можна скористатися функцією Left для отримання всіх символів, розташованих ліворуч від символу пропуску. Якщо символ пробілу не знайдено, використовується все введене ім'я.

Якщо рядок, наданий як результат виконання функції InputBox, виглядає як число, його можна перетворити за допомогою функції VBA Val.

У процедурі GetWord пропонується ввести пропущене слово (рис. 2). Цей приклад також ілюструє застосування іменованих аргументів ( рі t). Текст запиту вибирається з комірки А1 робочого листа.

Sub GetWord() Dim TheWord As String Dim p As String Dim t As String p = Range("A1") t = "Яке слово пропущено?" TheWord = InputBox(prompt:=p, Title:=t) If UCase(TheWord) = "ВОДОКАЧКУ" Then MsgBox "Правильно." Else MsgBox "Не вірно." End If End Sub

Sub GetWord ()

Dim TheWord As String

Dim p As String

Dim t As String

p = Range ("A1")

t = "Яке слово пропущено?"

TheWord = InputBox (prompt : = p , Title : = t )

If UCase (TheWord ) = "ВОДОКАЧКУ" Then

MsgBox "Вірно."

Else

MsgBox "Не вірно."

End If

End Sub

Мал. 2. Використання функції VBA inputBox, що відображає запит

Метод Excel InputBox

Метод Excel InputBox у порівнянні з функцією VBA InputBox надає три переваги:

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

Метод InputBox має наступний синтаксис.

InputBox(запит, [, заголовок], [, за замовчуванням], [, зліва], [, зверху], [, довідка, розділ], [, тип])

  • Запит. Вказує текст, який відображається у вікні введення (обов'язковий параметр).
  • Заголовок. Визначає назву вікна введення (необов'язковий параметр).
  • За замовчуванням. Вказує значення, яке відображається у вікні введення за промовчанням (необов'язковий параметр).
  • Зліва, зверху. Визначають координати лівого верхнього кута вікна введення на екрані (необов'язкові параметри).
  • Довідка, розділ. Вказують файл та розділ у довідковій системі (необов'язкові параметри).
  • Тип. Вказує код типу даних, який повертатиметься методом (необов'язковий параметр; значення див. рис. 3).

Мал. 3. Коди типів даних, які повертаються методом Excel InputBox

Використовуючи суму наведених вище значень, можна повернути кілька типів даних. Наприклад, для відображення вікна введення, яке приймає текстовий або числовий тип даних, встановіть код 3 (1 + 2 або число + текст). Якщо як код типу даних застосувати значення 8, то користувач зможе ввести в поле адресу осередку або діапазону осередків. Користувач також може вибрати діапазон на поточному робочому аркуші.

У процедурі EraseRange використовується метод InputBox. Користувач може вказати діапазон, що віддаляється (рис. 4). Адреса діапазону вводиться у вікно вручну або виділяється мишею на аркуші. Метод InputBox з кодом 8 повертає об'єкт Range (зверніть увагу на ключове слово Set). Після цього вибраний діапазон очищається (за допомогою методу Clear). За замовчуванням у полі вікна введення відображається адреса поточної виділеної комірки. Якщо у вікні введення клацнути на кнопці Відміна, то оператор On Error завершить процедуру.

Sub EraseRange() Dim UserRange Початок On Error GoTo Canceled Set UserRange = Application.InputBox _ (Prompt:="Видалений діапазон:", _ Title:="Видалення діапазону", _ Default:=Selection.Address, _ Type:= 8) UserRange.Clear UserRange.Select Canceled: End Sub

Мал. 4. Приклад використання методу InputBox для вибору діапазону

Якщо в процедурі EraseRange ввести не діапазон адрес, Excel відобразить повідомлення (мал. 5) і дозволить користувачеві повторити введення даних.

Мал. 5. Метод InputBox автоматично перевіряє дані, що вводяться.

Функція VBA MsgBox

Функція VBA MsgBox використовується для відображення повідомлення. Також вона передає результат клацання на кнопці ОК або Скасувати). Синтаксис функції:

MsgBox(запит[, кнопки][, заголовок][, довідка, розділ])

  • Запит. Визначає текст, який відображатиметься у вікні повідомлення (обов'язковий параметр).
  • Кнопки. Містить числове вираз (або константу), яке визначає кнопки, що відображаються у вікні повідомлення (необов'язковий параметр; мал. 6). Можна також задати кнопку за замовчуванням.
  • Заголовок. Містить назву вікна повідомлення (необов'язковий параметр).
  • Довідка, розділ. Вказують файл та розділ довідкової системи (необов'язкові параметри).

Мал. 6. Константи та значення, що використовуються для вибору кнопок у функції MsgBox

Перша група значень (0–5) описує номер та тип кнопок у діалоговому вікні. Друга група (16, 32, 48, 64) визначає стиль значка. Третя група (0, 256, 512) визначає, яка кнопка призначена за умовчанням. Четверта група (0,4096) визначає модальність вікна повідомлення. П'ята вказує, чи показувати вікно повідомлень поверх інших вікон, встановлює вирівнювання та напрямок тексту. У процесі додавання чисел для отримання остаточного значення аргументу Buttons слід використовувати лише одне число з кожної групи.

Можна використовувати функцію MsgBox як процедуру (для відображення повідомлення), а також присвоїти значення змінної, що повертається цією функцією. Функція MsgBox повертає результат, який представляє кнопку, на якій клацнув користувач. У наступному прикладі відображається повідомлення та не повертається результат (код функцій, наведених у цьому розділі див. також у файлі VBAmsgbox.xlsm).

Sub MsgBoxDemo() MsgBox "При виконанні макросу помилок не відбулося." End Sub

Щоб отримати результат з вікна повідомлення, надайте значення змінної, що повертається функцією MsgBox. У наступному коді використовується ряд вбудованих констант (мал. 7), які спрощують управління значеннями, що повертаються функцією MsgBox.

Sub GetAnswer() Dim Ans As Integer Ans = MsgBox("Продовжувати?", vbYesNo) Select Case Ans Case vbYes " ... [код Ans дорівнює Yes] Case vbNo " ... [код Ans рівно No] End Select End Sub

Мал. 7. Константи, що повертаються MsgBox

Функція MsgBox повертає змінну, що має тип Integer. Вам необов'язково використовувати змінну для збереження результату виконання функції MsgBox. Наступна процедура є варіацією процедури GetAnswer.

Sub GetAnswer2() If MsgBox("Продовжувати?", vbYesNo) = vbYes Then " ... [код при Ans дорівнює Yes] Else " ... [код при Ans дорівнює No] End If End Sub

У наступному прикладі функції використовується комбінація констант для відображення вікна повідомлення з кнопками Так, Ні та знаком питання (рис. 8). Друга кнопка ( Ні) використовується за замовчуванням. Для простоти константи додані до змінної Config.

Private Function ContinueProcedure() As Boolean Dim Config As Integer Dim Ans As Integer Config = vbYesNo + vbQuestion + vbDefaultButton2 Ans = MsgBox("Відбулася помилка. Продовжити?", Config) If Ans = vbYesThen Function

Мал. 8. Параметр КнопкиФункція MsgBox визначає кнопки, які відображаються у вікні повідомлення

У файлі VBAmsgbox.xlsmФункція ContinueProcedure в демонстраційних цілях представлена ​​у вигляді процедури. Функція ContinueProcedure може викликатись з іншої процедури. Наприклад, оператор

If Not ContinueProcedure() Then Exit Sub

викликає функцію ContinueProcedure (яка відображає вікно повідомлення). Якщо функція повертає значення брехня (тобто користувач клацнув на кнопці Ні), то процедуру буде завершено. В іншому випадку виконується наступний оператор.

Якщо у повідомленні необхідно вказати розрив рядка (рис. 9), скористайтесь константою vbCrLf (або vbNewLine):

Sub MultiLine() Dim Msg As String Msg = "Це перший рядок." & vbCrLf & vbNewLine Msg = Msg & "Другий рядок." & vbCrLf Msg = Msg & "Третій рядок." MsgBox Msg End Sub

Sub MultiLine ()

Dim Msg As String

Msg = "Це перший рядок."& vbCrLf & vbNewLine

Msg = Msg & "Другий рядок." & vbCrLf

Msg = Msg & "Третій рядок."

MsgBox Msg

End Sub

Мал. 9. Розбиття повідомлення на кілька рядків

Для включення в повідомлення символу табуляції використовується константа vbTab. У процедурі ShowRange вікно повідомлення використовується для відображення діапазону значень розміром 10 рядків на 3 стовпці - комірки А1: С10 (рис. 10). І тут стовпці розділені з допомогою константи vbTab. Нові рядки вставляються за допомогою константи vbCrLf. Функція MsgBox приймає як параметр рядок, довжина якого не перевищує 1023 символи. Така довжина визначає обмеження на кількість осередків, яку можна відобразити в повідомленні.

Sub ShowRange() Dim Msg As String Dim r As Integer, c As Integer Msg = "" For r = 1 To 10 For c = 1 To 3 Msg = Msg & Cells(r, c).Text If c<>3 Then Msg = Msg & vbTab Next c Msg = Msg & vbCrLf Next r MsgBox Msg End Sub

Sub ShowRange ()

Dim Msg As String

Dim r As Integer , c As Integer

Msg = ""

For r = 1 To 10

For c = 1 To 3

Msg = Msg & Cells (r, c). Text

If c<>3 Then Msg = Msg & vbTab

Next c

Msg = Msg & vbCrLf

Next r

MsgBox Msg

End Sub

Мал. 10. Текст у цьому вікні повідомлення містить символи табуляції та розриву рядків

Метод Excel GetOpenFilename

Якщо програмі необхідно отримати від користувача ім'я файлу, то можна скористатися функцією InputBox, але цей підхід часто призводить до помилок. Більш надійним вважається використання методу GetOpenFilename об'єкта Application, який дозволяє переконатися, що програма отримала коректне ім'я файлу (а також його повний шлях). Даний метод дозволяє відобразити стандартне діалогове вікно Відкриття документа, але цей файл не відкривається. Натомість метод повертає рядок, який містить шлях та ім'я файлу, вибрані користувачем. Після закінчення цього процесу з ім'ям файлу можна робити все, що завгодно. Синтаксис (усі параметри необов'язкові):

Application.GetOpenFilename(фільтр_файлу, індекс_фільтра, заголовок, множинний_вибір)

  • Фільтр_файлу. Містить рядок, який визначає критерій фільтрації файлів (необов'язковий параметр).
  • Індекс_фільтра. Вказує індексний номер критерію фільтрації файлів, який використовується за замовчуванням (необов'язковий параметр).
  • Заголовок. Містить заголовок діалогового вікна (необов'язковий параметр). Якщо цей параметр не вказати, буде використано заголовок Відкриття документа.
  • Множинний_вибір. Необов'язковий параметр. Якщо вона має значення ІСТИНА, можна вибрати кілька імен файлів. Ім'я кожного файлу заноситься до масиву. За замовчуванням цей параметр має брехню.

Аргумент Фильтр_файла визначає вміст списку, що розкривається Тип файлів, що знаходиться у вікні Відкриття документа. Аргумент складається з рядка, що визначає значення, що відображається, а також рядки дійсної специфікації типу файлів, в якій знаходяться групові символи. Обидва елементи аргументу розділені комами. Якщо цей аргумент не вказувати, буде використано значення, задане за замовчуванням: " Усі файли (*.*),*.* " . Перша частина рядка Усі файли (*.*) – це текст, який відображається у розкривному списку тип файлів. Друга частина рядка *.* вказує тип файлів, що відображаються.

У наступних інструкціях змінної Filt надається рядкове значення. Цей рядок згодом використовується як аргумент фільтр_файлу методу GetOpenFilename. У цьому випадку діалогове вікно надасть користувачеві можливість вибрати один із чотирьох типів файлів (крім варіанта Усі файли). Якщо встановити значення змінної Filt, то буде використовуватися оператор конкатенації рядка VBA. Цей спосіб спрощує управління громіздкими та складними аргументами.

Filt = "Текстові файли (*.txt),*.txt," & _ "Файли Lotus (*.prn),*.prn," & _ "Файли, розділені комою (*.csv),*.csv," & _ "Файли ASCII (*.asc),*.asc," & _ "Всі файли (*.*),*.*"

У наступному прикладі користувача запитується ім'я файлу. При цьому в полі типу файлів використовуються п'ять фільтрів (код міститься у файлі prompt for file.xlsm).

Sub GetImportFileName() Dim Filt As String Dim FilterIndex As Integer Dim FileName As Variant Dim Title As String " Налаштування списку фільтрів Filt = "Text Files (*.txt),*.txt," & _ "Lotus Files (*.prn) ,*.prn," & _ "Comma Separated Files (*.csv),*.csv," & _ "ASCII Files (*.asc),*.asc," & _ "Всі файли (*.*), *.*" " Відображає *.* за промовчанням FilterIndex = 3 " Налаштування заголовка діалогового вікна Title = "Виберіть файл для імпорту" " Получение имени файла FileName = Application.GetOpenFilename _ (FileFilter:=Filt, _ FilterIndex:=FilterIndex, _ Title:=Title) " При отмене выйти из окна If FileName = False Then MsgBox "Файл не выбран." Exit Sub End If " Отображение полного имени и пути MsgBox "Вы выбрали " & FileName End Sub!}

Sub GetImportFileName()

Dim Filt As String

Dim FilterIndex As Integer

Dim FileName As Variant

Dim Title As String

" Налаштування списку фільтрів

Filt = "Text Files (*.txt), *.txt," & _

"Lotus Files (*.prn), *.prn," & _

"Comma Separated Files (*.csv), *.csv," & _

"ASCII Files (*.asc), *.asc," & _

"Всі файли (*.*), *.*"

" Відображає * . * за замовчуванням

FilterIndex = 3

" Налаштування заголовка діалогового вікна

Title = "Виберіть файл для імпорту" !}

" Отримання ім'я файлу

FileName = Application. GetOpenFilename _

(FileFilter: = Filt, _

FilterIndex : = FilterIndex , _

Title: = Title)

При скасуванні вийти з вікна

If FileName = False Then

MsgBox "Файл не вибраний."

Exit Sub

End If

" Відображення повного імені шляху

MsgBox"Ви вибрали "& FileName

EndSub

На рис. 11 показано діалогове вікно, яке виводиться на екран після виконання цієї процедури (за промовчанням пропонується фільтр *.csv).

Мал. 11. Метод GetOpenFilename відображає діалогове вікно, в якому вибирається файл

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

Sub GetImportFileName2() Dim Filt As String Dim FilterIndex As Integer Dim FileName As Variant Dim Title As String Dim i As Integer Dim Msg As String " Встановлення списку фільтрів файлів Filt = "Text Files (*.txt),*.txt," & _ "Lotus Files (*.prn), *.prn," & _ "Comma Separated Files (*.csv), *.csv," & _ "ASCII Files (*.asc), *.asc," & _ "All Files (*.*),*.*" " Відображає *.* за промовчанням FilterIndex = 5 " Налаштування заголовка діалогового вікна Title = "Виберіть файл для імпорту" " Получение имени файла FileName = Application.GetOpenFilename _ (FileFilter:=Filt, _ FilterIndex:=FilterIndex, _ Title:=Title, _ MultiSelect:=True) " Выход в случае отмены работы с диалоговым окном If Not IsArray(FileName) Then MsgBox "Файл не выбран." Exit Sub End If " Отображение полного пути и имени файлов For i = LBound(FileName) To UBound(FileName) Msg = Msg & FileName(i) & vbCrLf Next i MsgBox "Было выбрано:" & vbCrLf & Msg End Sub!}

Зверніть увагу: змінну FileName визначено як масив змінного типу (а не як рядок у попередньому прикладі). Причина полягає в тому, що FileName потенційно може містити масив значень, а не тільки один рядок.

Метод Excel GetSaveAsFilename

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

Application.GetSaveAsFilename(початкове_ім'я, фільтр_файлу, індекс_фільтра, заголовок, текст_кнопки)

  • Початкове_ім'я. Вказує можливе ім'я файлу.
  • Фільтр_файлу. Містить критерій фільтрації файлів, що відображаються у вікні.
  • Індекс_фільтра. Код критерію фільтрації файлів, який використовується за замовчуванням.
  • Заголовок. Визначає текст заголовка діалогового вікна.

Отримання імені папки

Щоб отримати ім'я файлу, найпростіше скористатися описаним вище методом GetOpenFileName. Але якщо потрібно отримати лише ім'я папки (без назви файлу), скористайтеся методом об'єкта Excel FileDialog. Наступна процедура відображає діалогове вікно, в якому можна вибрати папку (див. також файл get directory.xlsm). За допомогою функції MsgBox відображається ім'я вибраної папки (або повідомлення Скасовано).

Else

MsgBox. SelectedItems(1 )

EndIf

EndWith

EndSub

Об'єкт FileDialog дозволяє визначити початкову папку, вказуючи значення властивості InitialFileName. У прикладі як початкова папка застосовується шлях до файлів Excel, заданий за замовчуванням.

Відображення діалогових вікон Excel

Створюваний вами код VBA може викликати на виконання багато команд Excel, що знаходяться на стрічці. І якщо в результаті виконання команди відкривається діалогове вікно, ваш код може робити вибір у діалоговому вікні (навіть якщо саме діалогове вікно не відображається). Наприклад, наступна інструкція VBA еквівалентна вибору команди Головна –> Редагування –> Знайти та виділити –> Перейтита вказівкою діапазону осередків А1:СЗ з наступним клацанням на кнопці ОК. Але саме діалогове вікно Перехідпри цьому не відображається (саме це і потрібно).

Application.Goto Reference:=Range("А1:СЗ")

Іноді доводиться відображати вбудовані вікна Excel, щоб користувач міг зробити свій вибір. Для цього використовується колекція Dialogs об'єкта Application. Зверніть увагу, що в даний час компанія Microsoft припинила підтримку цієї властивості. У попередніх версіях Excel меню та панелі інструментів створювалися за допомогою об'єкта CommandBar. У версіях Excel 2007 і Excel 2010 цей об'єкт, як і раніше, доступний, хоча і працює не так, як раніше. Починаючи з версії Excel 2007, можливості об'єкта CommandBarбули значно розширені. Зокрема, об'єкт CommandBarможна використовувати для виклику команд стрічки за допомогою VBA. Багато команд, доступ до яких відкривається за допомогою стрічки, відображають діалогове вікно. Наприклад, наступна інструкція відображає діалогове вікно Виведення на екран прихованого аркуша(рис. 12; див. також файл ribbon control names.xlsm):

Application.CommandBars.ExecuteMso("SheetUnhide")

Мал. 12. Діалогове вікно, що відображається в результаті виконання зазначеного вище оператора

Метод ExecuteMso приймає лише один аргумент, idMso, який представляє елемент управління стрічкою. На жаль, відомостей про багато параметрів у довідковій системі немає.

У файлі ribbon control names.xlsmописано всі назви параметрів команд стрічки Excel. Поекспериментуйте з параметрами, наведеними в цій робочій книзі. Багато хто з них викликає команди негайно (без проміжних діалогових вікон). Але більшість із них генерує помилку під час використання у неправильному контексті. Наприклад, Excel відображає повідомлення про помилку, якщо команда Functionwizard викликається у разі вибору діаграми.

В результаті виконання наступного оператора відображається вкладка Шрифтдіалогового вікна Формат осередків:

Application.CommandBars.ExecuteMso("FormatCellsFontDialog")

Насправді, користуватися об'єктами CommandBar не варто, оскільки навряд чи вони будуть підтримуватися в майбутніх версіях Excel.

Відображення форми введення даних

Багато користувачів застосовують Excel для керування списками, інформація в яких ранжована по рядках. Excel підтримує простий спосіб роботи з подібними типами даних за допомогою вбудованих форм введення даних, які можуть створюватися автоматично. Подібна форма призначена для роботи як із звичайним діапазоном, так і з діапазоном, оформленим у вигляді таблиці (за допомогою команди Вставка –> Таблиці –> Таблиця). Приклад форми введення даних показано на рис. 13 (див. також файл data form example.xlsm).

Мал. 13. Деякі користувачі вважають за краще застосовувати вбудовані форми введення даних Excel для введення відомостей; щоб збільшити зображення клацніть на ньому правою кнопкою миші та виберіть Відкрити картинку в новій вкладці

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

  1. Клацніть правою кнопкою миші на панелі швидкого доступу та в контекстному меню виберіть параметр Налаштування панелі швидкого доступу.
  2. На екрані з'явиться вкладка Панель швидкого доступудіалогового вікна Параметри Excel.
  3. У списку, що розкривається Вибрати команди звиберіть параметр Команди не на стрічці.
  4. У списку виберіть параметр Форма.
  5. Клацніть на кнопці ДодатиЩоб додати вибрану команду до панелі швидкого доступу.
  6. Клацніть на кнопку ОК для закриття діалогового вікна Параметри Excel.

Після виконання наведених вище дій на панелі швидкого доступу з'явиться новий значок.

p align="justify"> Для роботи з формою введення даних слід структурувати дані таким чином, щоб Excel розпізнавав їх у вигляді таблиці. Почніть із вказівки заголовків стовпців у першому рядку діапазону даних, що вводяться. Виділіть будь-яку комірку в таблиці та клацніть на кнопці Формапанелі швидкого доступу Excel відображає діалогове вікно, у якому вводитимуться дані. Для переміщення між текстовими полями для введення інформації використовуйте клавішу . Якщо комірка містить формулу, результат обчислень відображається у вигляді тексту (а не у форматі поля введення даних). Інакше кажучи, неможливо змінити формули з допомогою форми введення даних.

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

Використовуйте метод ShowDataForm для відображення форми введення даних Excel. Єдина вимога полягає в тому, що активний осередок повинен перебувати в діапазоні. Наступний код активізує комірку А1 (у таблиці), а потім відображає форму введення даних.

mob_info