Tento tutoriál se bude zabývat tím, jak pomocí funkce VBA MsgBox zobrazovat schránky zpráv uživatelům (včetně schránky zpráv YesNo). Také by vás mohl zajímat náš článek o InputBoxech.
Funkce VBA MsgBox
Ve VBA je snadné zobrazit jednoduchý MsgBox:
1 | MsgBox „Toto je schránka zpráv“ |
Můžete však udělat mnohem víc, než zobrazit jednoduché okno se zprávou OK. Pojďme se rychle podívat na komplikovaný příklad, než se ponoříme do konkrétních…
VBA Ano Žádné pole se zprávou
Níže vytvoříme okno se zprávou s:
- Název „Název pole zprávy“ a výzva „Text“
- Ikona otazníku
- Možnosti Ano / Ne namísto jednoduchého „OK“
- Výchozí tlačítko = „Ne“
123 | Dim odpověď jako celé čísloanswer = MsgBox ("Text", vbQuestion + vbYesNo + vbDefaultButton2, "Název pole zprávy") |
Okno zpráv vrátí vbYes nebo vbNo v závislosti na výběru uživatele. Poté můžete na základě výběru provádět různé akce:
12345 | If answer = vbYes ThenMsgBox „Ano“JinýMsgBox „Ne“Konec If |
V další části vám ukážeme všechny možnosti, které máte při vytváření políček zpráv k dispozici. Potom vás seznámíme se syntaxí funkce MsgBox a nakonec si projdeme další příklady zpráv.
Možnosti schránky zpráv VBA
Podívejte se na obrázek níže. Zde uvidíte (téměř) všechny možnosti, které máte při vytváření políček zpráv k dispozici. Všímejte si ikon a různých tlačítek.
Toto je snímek obrazovky „MessageBox Builder“ z našeho doplňku Premium VBA: AutoMacro. MessageBox Builder vám umožňuje rychle navrhnout požadovanou schránku zpráv a vložit kód do modulu kódu. Obsahuje také mnoho dalších tvůrců kódu, rozsáhlou knihovnu kódů VBA a sortiment kódovacích nástrojů. To musí mít každý vývojář VBA.
Syntaxe funkce MsgBox
MsgBox (výzva [, tlačítka] [, název] [, soubor nápovědy, kontext])
výzva (povinné) - Toto je primární text zprávy.
tlačítka - Vyberte, která tlačítka chcete zobrazit. Pokud je vynecháno, „OKonly“. Zde můžete také určit, jakou ikonu zobrazit a výchozí tlačítko.
titul - Název v horní části pole se zprávou. Pokud je vynechán, zobrazí se název aktuální aplikace (např. Microsoft Excel).
pomocný soubor - Zadejte soubor nápovědy, ke kterému se lze dostat po kliknutí na tlačítko „Nápověda“. Pokud je zadáno, musíte také přidat kontext (níže)
kontext - Číselný výraz představující číslo kontextu nápovědy přiřazené k příslušnému tématu nápovědy.
Pravděpodobně můžete ignorovat soubor nápovědy a kontextové argumenty. Nikdy jsem je neviděl použité.
Přizpůsobte název a výzvu pole zprávy
Funkce MsgBox vám umožňuje přizpůsobit název a zprávy s výzvou takto:
1 | Msgbox "Prompt", "Název" |
Další příklad:
123 | Sub MsgBoxPromptTitle ()MsgBox "Krok 1 dokončen. Krok 2 spustíte kliknutím na OK." "" Krok 1 z 5 "End Sub |
Důležité! Nezapomeňte obklopit text uvozovkami.
MessageBox LineBreaks
Do výzev ve schránce zpráv můžete také přidat konce řádků pomocí „vbNewLine“.
123 | Dílčí MsgBoxPromptTitle_NewLine ()MsgBox "Krok 1 dokončen." & vbNewLine & "Kliknutím na OK spustíte krok 2.", "Krok 1 z 5"End Sub |
Všimněte si, že ke spojení textu používáme symbol &. Další informace o používání & s textem a dalších možnostech vkládání řádků najdete v našem článku o spojování textu.
Ikony MsgBox
VBA vám dává možnost přidat jednu ze čtyř předem připravených ikon do vašich zpráv:
Ikona konstantní | Ikona |
---|---|
vbInformace | |
vbKritické | |
vbQuestion | |
vbExlamation |
Konstantní ikona by měla být umístěna v argumentu tlačítka:
123 | Sub MsgBoxQuestionIcon ()MsgBox "Question Question", vbQuestionEnd Sub |
Tím se vygeneruje výchozí okno se zprávou „OK“ s ikonou Otázka:
Všimněte si, jak vám při psaní editor VBA ukáže možnosti, které máte k dispozici:
To je užitečné, protože si nemusíte pamatovat přesnou syntaxi ani názvy ikon nebo tlačítek.
Nyní předvedeme každou ikonu pole se zprávou:
Ikony MsgBox - informace
123 | Sub MsgBoxInformationIcon ()MsgBox „Information Information“, vbInformationEnd Sub |
Ikony MsgBox - kritické
123 | Sub MsgBoxCriticalIcon ()MsgBox "Kritický příklad", vbCriticalEnd Sub |
Ikony MsgBox - otázka
123 | Sub MsgBoxQuestionIcon ()MsgBox "Question Question", vbQuestionEnd Sub |
Ikony MsgBox - vykřičník
123 | Sub MsgBoxExclamationIcon ()MsgBox "Příklad vykřičníku", vbExclamationEnd Sub |
Níže budeme hovořit o generování polí zpráv s různým rozložením tlačítek. Pokud zvolíte jiný typ pole se zprávou, budete muset přidat typ ikony za tlačítka pomocí „+“:
123 | Sub MsgBoxQuestionIcon ()MsgBox „Chcete pokračovat?“, VbOKCancel + vbQuestionEnd Sub |
Proměnné MsgBox
Doposud jsme pracovali především s výchozím rámečkem zprávy „OK“. Okno se zprávou OK má pouze jednu možnost: Stisknutím tlačítka „OK“ umožní kód pokračovat. Můžete však zadat i další seskupení tlačítek: OK / Zrušit, Ano / Ne atd.
V takovém případě budete chtít provádět různé akce podle toho, jaké tlačítko stisknete. Podívejme se na příklad.
Zde je okno se zprávou, které vygenerujeme:
Toto je celý kód (dále ho rozdělíme):
123456789101112 | Sub MsgBoxVariable ()Dim odpověď jako celé čísloanswer = MsgBox („Chcete pokračovat?“, vbQuestion + vbYesNo)If answer = vbYes ThenMsgBox „Ano“JinýMsgBox „Ne“Konec IfEnd Sub |
Nejprve přiřadíme výstup schránky do celočíselné proměnné.
123 | Dim odpověď jako celé čísloanswer = MsgBox („Chcete pokračovat?“, vbQuestion + vbYesNo) |
Dále použijeme If-Else k určení, co dělat, podle toho, jaké tlačítko bylo stisknuto:
12345 | If answer = vbYes ThenMsgBox „Ano“JinýMsgBox „Ne“Konec If |
Funkce MsgBox vrací celočíselnou hodnotu (mezi 1-7), takže proměnnou definujeme jako celočíselný typ. Místo celočíselného čísla však můžete odkazovat na konstantu (např. VbOK, vbCancel atd.). V této tabulce jsou uvedeny všechny možnosti:
Knoflík | Konstantní | Hodnota |
---|---|---|
OK | vbOK | 1 |
zrušení | vbCancel | 2 |
Přerušit | vbAbort | 3 |
Zkuste to znovu | vb Opakujte | 4 |
Ignorovat | vb Ignorovat | 5 |
Ano | vbAno | 6 |
Ne | vbNo | 7 |
Nyní předvedeme seskupení jednotlivých tlačítek:
Okno se zprávou - vbOKOnly
Toto je standardní schránka zpráv VBA.
123456 | Sub MsgBox_OKOnly ()Dim odpověď jako celé čísloanswer = MsgBox ("Příklad OKOnly", vbOKOnly)End Sub |
OK Zrušit pole se zprávou - vbOKCancel
123456789101112 | Sub MsgBox_OKCancel ()Dim odpověď jako celé čísloanswer = MsgBox ("OK Zrušit příklad", vbOKCancel)Pokud odpověď = vbOK ThenMsgBox "OK"JinýMsgBox "Zrušit"Konec IfEnd Sub |
Ano Ne Pole se zprávou - vbYesNo
123456789101112 | Sub MsgBox_YesNo ()Dim odpověď jako celé čísloanswer = MsgBox ("Yes No Example", vbYesNo)If answer = vbYes ThenMsgBox „Ano“JinýMsgBox „Ne“Konec IfEnd Sub |
Ano Ne Zrušit pole se zprávou - vbYesNoCancel
1234567891011121314 | Sub MsgBox_YesNoCancel ()Dim odpověď jako celé čísloanswer = MsgBox ("Ano Ne Zrušit příklad", vbYesNoCancel)If answer = vbYes ThenMsgBox „Ano“ElseIf answer = vbNo ThenMsgBox „Ne“JinýMsgBox "Zrušit"Konec IfEnd Sub |
Přerušit Opakovat Ignorovat pole se zprávou - vbAbortRetryIgnore
1234567891011121314 | Dílčí MsgBox_AbortRetryIgnore ()Dim odpověď jako celé čísloanswer = MsgBox ("Abort Retry Ignore Example", vbAbortRetryIgnore)If answer = vbAbort ThenMsgBox "Přerušit"ElseIf answer = vb Opakujte potomMsgBox „Opakovat“JinýMsgBox "Ignorovat"Konec IfEnd Sub |
Opakovat Zrušit pole se zprávou - vbRetryCancel
123456789101112 | Sub MsgBox_RetryCancel ()Dim odpověď jako celé čísloanswer = MsgBox ("Opakovat příklad zrušení", vbRetryCancel)If answer = vbRetry ThenMsgBox „Opakovat“JinýMsgBox "Zrušit"Konec IfEnd Sub |
Příklady VBA MessageBoxu
Potvrzení pole se zprávou před spuštěním makra
Tento kód zobrazí pole Ano Ano před voláním makra. Pokud kliknete na Ano, zavolá se makro, pokud se klikne na Ne, makro se nespustí.
12345678 | Dílčí Msgbox_BeforeRunning ()Dim odpověď jako celé čísloanswer = MsgBox („Chcete spustit Macro1?“, vbQuestion + vbYesNo)If answer = vbYes Then Call Macro1End Sub |
Ano / Ne Okno se zprávou - Ukončit pod
Zde s uživatelem potvrdíme, zda pokračovat v běhu makra. Pokud kliknete na Ne, kód opustí dílčí část, jinak bude postup pokračovat.
12345678910 | Sub Msgbox_BeforeRunning ()Dim odpověď jako celé čísloanswer = MsgBox („Chcete pokračovat?“, vbQuestion + vbYesNo)If answer = vbNo Then Exit Sub„Nějaký kódEnd Sub |
Pole zpráv VBA v Access VBA
Všechny výše uvedené příklady fungují v Access VBA úplně stejně jako v Excelu VBA.