Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:
... použití dialogového okna ...
17.7.2014: Doplněno a aktualizováno.
V článku se dozvíte jak na dialogové okna v Excel za pomocí VBa maker. Pro přehlednost a rychlou orientaci je článek rozdělen na jednotlivé kapitoly:
Dialogové okno využijete nejen ke zobrazení chybových hlášek, ale také při splnění nějakého úkolu, nebo při potřebě zodpovědět jednoduchý dotaz (Chcete větší plat? ;). Uživatel si přečte informační text a buď potvrdí tlačítkem OK, že zprávu akceptovat, nebo může zvolit odpověď. Například ANO nebo NE.
Než dialogové okno budeme využívat podíváme se na jeho syntaxi a co znamenají jednotlivé parametry (jaký mají význam, jakých hodnot mohou nabývat).
MsgBox(prompt [, buttons] [, title] [, helpfile, context])
Popis argumentů:
Poznámka k nastavení: Chcete-li některé poziční argumenty vynechat, musíte vložit odpovídající počet čárek.
Buttons skládá se ze čtyř skupin:
Buttons - programátorské nastavení:
Konstanta | Hodnota | Popis |
---|---|---|
vbOKOnly | 0 | Zobrazí pouze tlačítko OK. Platí i v případě pokud neuvedeme žádnou hodnotu. (viz příklad níže) |
VbOKCancel | 1 | Zobrazí tlačítka OK a Storno. |
VbAbortRetryIgnore | 2 | Zobrazí tlačítka Zpět, Znovu a Ignorovat. |
VbYesNoCancel | 3 | Zobrazí tlačítka Ano, Ne a Storno. |
VbYesNo | 4 | Zobrazí tlačítka Ano a Ne. |
VbRetryCancel | 5 | Zobrazí tlačítka Znovu a Storno. |
VbCritical | 16 | Zobrazí ikonu Kritická zpráva. |
VbQuestion | 32 | Zobrazí ikonu Varovný dotaz. |
VbExclamation | 48 | Zobrazí ikonu Varovná zpráva. |
VbInformation | 64 | Zobrazí ikonu Informační zpráva |
VbDefaultButton1 | 0 | Výchozí je první tlačítko |
VbDefaultButton2 | 256 | Výchozí je druhé tlačítko. |
VbDefaultButton3 | 512 | Výchozí je třetí tlačítko |
VbDefaultButton4 | 768 | Výchozí je čtvrté tlačítko |
VbApplicationModal | 0 | Aplikační režim; uživatel musí před pokračováním další práce ve zvolené aplikaci odpovědět na zprávu |
VbSystemModal | 4096 | Systémový režim; všechny aplikace jsou pozastaveny, dokud uživatel neodpoví na zobrazenou zprávu |
Varianta 1
Private Sub CommandButton2_Click()
MsgBox ("Moje první okno.")
End Sub
Varianta 2
Private Sub CommandButton2_Click()
i = MsgBox ("Moje první okno.", , "Nadpis okna")
End Sub
Varianta 1
i = MsgBox("Chcete větší plat?", vbYesNo, "Plat")
Varianta 2
i = MsgBox("Chcete větší plat?", 4, "Plat")
Varianta 3 - vyhodnocení odpovědi
Private Sub CommandButton1_Click()
i = MsgBox("Chcete větší plat?", vbYesNo, "Plat")
' vyhodnocení odpovědi
Select Case i
Case vbNo
MsgBox ("NE")
Case vbYes
MsgBox ("ANO")
End Select
End Sub
Pokud využíváte tlačítka doporučuji prostudovat kapitolu:
Varianta 1
i = MsgBox("Co chceš udělat ?", vbAbortRetryIgnore, "Menu text")
Varianta 2
i = MsgBox("Co chceš udělat ?", 2, "Menu text")
Nastavení buttons (tlačítek) jsou následující (Konstanta - Hodnota - Popis):
Poznámka: Některé popisy se mohou mírně lišit na základě verze a nastavení MS Windows.
Pokud využíváte tlačítka doporučuji prostudovat kapitolu:
Private Sub CommandButton4_Click()
i = MsgBox("Ahoj", vbOKOnly + vbCritical)
i = MsgBox("Ahoj", vbOKOnly + vbQuestion)
i = MsgBox("Ahoj", vbOKOnly + vbExclamation)
i = MsgBox("Ahoj", vbOKOnly + vbInformation)
End Sub
Nastavení ikonek jsou následující (Konstanta - Hodnota - Popis):
Poznámka: Tlačítko OK doplní VBA automaticky.
Pokud využíváte tlačítka doporučuji prostudovat kapitolu:
MsgBox "První řádek" & vbCrLf & "Druhý řádek" & vbCrLf & "Třetí řádek"
MsgBox Chr(200) & " jiný znak " & Chr(244)
Pokud potřebujeme zobrazit výsledek výpočtu, který máme v buňce.
MsgBox "Hodnota v buňce A1 je: " & Range("A1").Value
Jednotlivé příklady spojeny do jednoho. Tj. ukázka jak, že můžeme kombinovat.
i = MsgBox("Tak co jdeme na pivo ? " & vbCrLf & "Druhý řádek" & vbCrLf & "Třetí řádek" & vbCrLf & "Hodnota v buňce A1 je: " & Range("A1").Value & vbCrLf & "Specialní znak: " & Chr(244), vbYesNo + 256 + vbQuestion, " P I V O ! ! ")
Vracené hodnoty na základě zvolených tlačítek (Konstanta - Hodnota - - Popis)
Ukázka využití návratového kódu
Private Sub CommandButton1_Click()
i = MsgBox("Chcete větší plat?", vbYesNo, "Plat")
' vyhodnocení odpovědi
Select Case i
Case vbNo
MsgBox ("NE - správna odpověď! ")
Case vbYes
MsgBox ("ANO - zvolte jinou odpověď ;)")
End Select
End Sub
Jednotlivé kódy se sčítají, výsledná hodnota je součtem požadovaných tlačítek, ikon, přednastaveného tlačítka..
Pokud potřebujete doplnit dialogové okno o nápovědu. Nejprve musíte mít k dispozici helpfile (soubor s nápovědou). Pokud je nápověda správně vytvořená můžete se v rámci tohoto souboru odkazovat na konkrétní kapitolu context. Pokud nápověda není dobře členěná jako Context udejte 0.
souborNapoveda = "D:\mujhelp.chm"
ZpravaVcetneNapovedy = MsgBox("Nápověda", vbOKCancel + vbQuestion + _
vbDefaultButton1 + vbMsgBoxHelpButton, "Zobrazí nápovědu - help", souborNapoveda, 0)
Kód byl nalezen na internetu, vypadá funkční. Funguje jen na tlačítka ANO NE.
MsgBox "Zavření přes horní X zablokováno.", 20, "NÁZEV OKNA"
Osobně jsem nikdy nepoužil, ale byl dotaz v komentářích tak jsem doplnil odpověď i do článku.
Měl jsem pár dotazů jak do MsgBoxu zadávat hodnoty. To nejde na to je InputBox.
Návod jak na InputBox jsem sepsal v samostatném článku o InputBox.
Hotové ukázkové příklady ke stažení: Dialogové okno - MsgBox - VBA Excel - prakticky.
Využívate dialogové okna? Máte nějaký speciální kód pro práci s dialogovým oknem? Můžete se pochlubit v komentářích.
Článek byl aktualizován: 19.09.2020 11:06
Ušetřil vám tento web čas, peníze? Pomohl vyřešit problém? Jste ochotni poskytnout symbolickou odměnu na další rozvoj? Vybrte si formu odměny, která vám vyhovuje.
Microsoft Office (Word, Excel, Google tabulky, PowerPoint) se věnuji od roku 2000 (od 2004 na této doméně) - V roce 2017 jsem od Microsoft získal prestižní ocenění MVP (zatím jsem jediný z ČR v kategorií Excel). Své vědomosti a zkušenosti dávám k dispozici i on-line ve videích pro SEDUO. Ve firmách školím a konzultuji, učím na MUNI. Tento web již tvořím přes 15 let. Zdarma je zde přes 1.000 návodu, tipů a triků, včetně přes 250 různých šablon, sešitů.
Přidáno: 26.05.12 05:40
Ahoj, když zvolím MsgBox s tlačítkem nápovědy, jak má vypadat kód, který po stisknutí "nápověda" najde třeba příslušný soubor ? m.thums@seznam.cz
Přidáno: 26.05.12 10:16
To m.thums: například takto:
souborNapoveda = "D:\mujhelp.chm"
strMessage = MsgBox("Nápověda", vbOKCancel + vbQuestion + _
vbDefaultButton1 + vbMsgBoxHelpButton, "Zobrazí nápovědu - help", souborNapoveda, 0)
0, nebo případné číslo odkazu na danou kapitolu v nápovědě
Přidáno: 04.02.13 08:39
Dobrý den, je možno umístit hlášku MsgBox třeba na pravý okraj listu? Děkuji za odpověď
Přidáno: 04.02.13 15:59
to J.P.: Pozicování je trochu komplikovanější. Popis je například na webu http://www.excely.com/excel-vba/define-a-position-of-messagebox.shtml
Přidáno: 26.05.13 19:02
Dobry den, napisu kod: Private Sub CommandButton2_Click() MsgBox ("Moje první okno.") End Sub Jak potom aktivuju, abych to okno videla? Diky, Petra
Přidáno: 28.05.13 21:11
To Petra: MsgBox se zobrazí například: Ve VBA okně klik na zelenou šipku. Nebo vložit na list tlačítko a do tlačítka vložit kod MsgBoxu, nebo jej spustí nějaká jiná akce (v podmínce IF).
Případně další články o VBA v rozcestníku:
http://office.lasakovi.com/excel/zaklady/excel-kurz-vba-on-line-zdarma/
Přidáno: 28.05.13 21:31
Jee, tak uz mi to funguje :-) Vymazala jsem tam na zacatku to Private. Nevim jestli to tim muze byt, ale okno se mi podarilo spustit. Tak se tesim na pokracovani. Diky, Petra
Přidáno: 17.07.14 08:23
Dobrý den, jak lze v dialogovém okně MSGBOX zakázat tlačítko "zrušit"? Díky Libor Sztacho
Přidáno: 17.07.14 16:58
To Libor Sztacho: Kód který jsem někde našel
MsgBox "Zavření přes horní X zablokováno.", 20, "NÁZEV OKNA"
Nebo využít zakázaní "x" ve vlastním formuláři
Přidáno: 21.07.14 10:12
Jen poznámka: MsgBox neumí pořádně Unicode (azbuka apod.), pro tyto účely je potřeba API funkce MessageBox. S API lze připravit i boudy - přejmenovat tlačítko ANO na NE apod. nebo třeba nachystat časově omezené zobrazení zprávy. Nechá se udělat i bublina zobrazující se v systémové liště.
Přidáno: 21.07.14 10:50
A ještě: Ta hodnota 20 pro "X - Close Button" značí součet 4 + 16, tj. vbYesNo + vbCritical, funguje ještě vbAbortRetryIgnore + vbCritical.
Přidáno: 29.07.14 08:14
To Petr Pecháček: Děkuji za podnětná doporučení. Na MessageBox. Třeba se bude někdy hodit.
Přidáno: 02.10.14 12:17
Dobry den, mel bych dotaz, lze udelat, ze bude msgbox stale viditelny, napr, pri vyberu tlacitka znova, pro opakovani makra, abych ho nemusel Msgbox znova aktivovat Dekuji Karel
Přidáno: 29.01.15 20:12
vážený pane Lasáku, pro přátele připravuji aplikaci, kterou budou moci ze kteréhokoli listu ukončit tlačítkem (to je OK ...DisplayAlert=False...Quit) Při otevírání ale u starších verzí naskakuje dialog...Makra povolit ano/ne, u verze 2010 je podobné upozornění zda povolit makra nahoře pod lištami. Můžete mi sdělit jak se tomu při spouštění vyhnout (aby byla makra povolena již samotným spuštěním a tyto dialogy se nezobrazovaly?)
Přidáno: 29.01.15 20:25
Ještě jednou - omlouvám se, že jsem předchozí neukončil poděkováním. při zavírání aplikace jak popsáno v předchozím příspěvku bych se rád ještě zbavil dialogu zda uložit či neuložit změny (nechci ukládat) a aplikace by se měla otevřít vždy na prvním listu. Díky Jirka
Přidáno: 02.02.15 08:52
To Jirka_111: -- V Exc2003 sa dá nastaviť Nízke zabezpečenie cez "Nástroje/Makro/Zabezpečení..." -- (Nedoporučuje sa - automaticky sa môže otvoriť súbor so škodlivým kódom)
Přidáno: 04.02.15 09:16
To Jirka_111: -- V Exc2007 -- Možnosti programu Excel/Centrum dôveryhodnosti/Nastavenie centra dôveryhodnosti/Nastavenie makra/Povoliť všetky makrá(neodporúča sa)
Přidáno: 04.02.15 10:48
Dobrý den, jeden dotaz, lze pomocí MsgBoxu vytvořit informační okno, ve kterém je vidět (například pomocí procent) určitý stav přepočtu? Dám příklad: Při zobrazení listu spustím makro Private Sub Worksheet_Activate(), které mi přepočítává určité hodnoty, čeká se dokud není přepočet hotový, cca 20 vteřin. Po tuto dobu bych chtěl pouze na obrazovce zobrazit informační okno, ve kterém by skákala procenta. Většinou si uživatel může myslet, že se excel kousnul, ale není tomu tak :-)
Přidáno: 05.02.15 09:05
Dan78: -- Riešení je viac, ale cez MsgBox by som to neriešil. Nakoľko by bol popis dlhší, doporučujem hľadať "Progress Bar" na Google napr.: -- http://www.excel-easy.com/vba/examples/progress-indicator.html
Přidáno: 05.02.15 11:15
Dobrý den, rád bych požádal o pomoc. Mám rozsáhlou tabulku, tabulka má několik sloupců. Potřeboval bych rychle zpřehlednit/najít údaje z těchto sloupců. Chtěl bych to řešit přes dialogové okno, kdy bych výběrem aktivní buňky přes jedno tlačítko vyvolal dialogové okno, které by obsahovalo informace z řádku vybrané aktivní buňky. Zobrazovaly by hodnoty řekněme ze sloupců P až V. Vyvolání informace prostřednitvím dialogového okna by znamelo, že informace bych nemusel hledat přes vodorovný posuvník. Je důležité, aby se informace objevovaly přes aktivní buňku. Postup by byl tedy takový, vybrat aktivní buňku (je to sloupec D), stiknout tlačítko, aby se objevily informace v dialogovém okně ze stejného řádku, ale obsažené ve sloupích P až V. Hledané informace nejlépe oddělit v dialogovém okně vždy na nový řádek. Nemůžu s tím hnout, díky moc za pomoc, Laďa.
Přidáno: 05.02.15 20:36
Zdravím, k mému problému, šlo by to samozřejmě řešit "pomocnou tabulkou", kde bych vyhledal hodnoty z buněk přes SVYHLEDAT a tyto buňky bych pak navázal na dialogové okno. Šlo by to ale řešit elegantněji?
Přidáno: 06.02.15 08:54
To Laďa: -- Zobrazenie stĺpcov v danom riadku:Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'Pri kliknutí do stĺpca "D", zobrazí v MsgBox obsah stĺpcov "P" až "V"
If Target.Column = 4 Then ' stĺpec "D"
rw = Target.Row
For col = 16 To 22 ' stĺpce "P" až "V"
temp = temp & vbCrLf & Cells(rw, col)
Next col
MsgBox temp
End If
End Sub
Přidáno: 06.02.15 10:56
Jojo děkuji, pěkná práce. Bylo by ještě možné, aby v dialogovém okně byl i název každého sloupce? Funguje to skvěle, jen bych ještě potřeboval hodnoty pojmenovat. Tedy v mé případě, ve sloupcích P až V je uvedeno např. jméno, příjmení, datum narození...atd. A potřeboval bych aby se v dialogovém okně objevilo jméno a daná hodnota z buňky, příjmení a daná hodnota z buňky...šlo by to takhle ještě vyšperkovat? Moc ti děkuji, je to přesně to, co jsem chtěl, ale s pojmenováním hodnot ze sloupců by bylo ještě lepší. Ještě jednou moc díky. Laďa.
Přidáno: 09.02.15 08:34
To Laďa: -- Medzi riadky For a Next treba vložiť: popis = Choose(col - 15, "Meno : ", _
"Priezv : ", _
"Dat_nar.: ", _
"Nazov4 : ", _
"Nazov5 : ", _
"Nazov6 : ", _
"Nazov7 : ")
Temp = Temp & vbCrLf & popis & Cells(rw, col)
Přidáno: 09.02.15 10:43
Paráda, jsi borec, moc šikovný, děkuji Ti, teď je to perfektní, ještě jednou moc díky, Laďa.
Přidáno: 11.02.15 20:52
Ahoj. Celkem si to tu dáváte. Já jsem začátečník. A chtěl bych se zeptat jestli lze změnit vzhled dialogového okna ? Třeba aby to byl jenom modrý čtvereček s textem. Děkuji
Přidáno: 24.02.15 11:32
To Jojo .... a další:) Bylo by ještě možné "zúžit" pole výběru pro aktivní buňku? Oč se mi jedná, nyní je výběr vázán na buňky v CELÉM sloupci D. Bylo by možné přepsat makro na výběr v sloupci D, např. pro D 10 - D 5000? Děkuji za pomoc, Laďa.
Přidáno: 27.02.15 07:27
To Laďa: -- riadok s "IF..." treba zameniť za: -- If Not Intersect(Target, Range("D10:D5000")) Is Nothing Then
Přidáno: 27.02.15 10:29
Jojo moc Ti děkuji, opravdu jsi mi moc pomohl, teď to funguje skvěle, klobouk dolů před Tebou, děkuji, Laďa.
Přidáno: 27.02.15 18:06
Dobrý potrebuji radu. s VBA pracuji ale ne na nejake vysoke urovni. Potrebuji makro ktere mi automaticky vyhodi msgbox s hlaskou a tlacitkem ok pokud bunka A1 bude mensi nez 0. udelal jsem uz vsechny mozne varianty ale proste se mi tam nedari dat tu podminku pro spusteni bunka A1 mensi nez 0. dekuji za radu
Přidáno: 03.12.15 12:49
Zdravím, potřeboval bych něco na ukončení vyskakovacích oken, makrem slučuji několik buňek ale po každém sloučení(makrem) mě excel upozorňuje: "Po sloučení buňek zůstane zachována jen....". Vzhledem k tomu, že v makru mám asi 200 příkazů na sloučení se mi nechce odklikávat 200 oken s tímto upozorněním. Nějaké rady? Díky,
Přidáno: 15.05.16 12:15
Tady je zjednoduseny kod na vyhodnoceni odpovedi ANO - NE. Pokud se vybere NE je konec a nic se nedeje, pokud se vybere ANO - pokracuje Vas dalsi vlastni kod.
If MsgBox("Pokračovat?", vbYesNo + vbQuestion) = vbNo Then Exit Sub
'dalsi kod pro kliknuti na ANO
Přidáno: 17.10.16 16:53
Ahoj, prosím o radu. Jak se dá změnit formát zobrazeného data v MsgBox, které je vypsáno z buňky. Tou změnou myslím například: 1.1.2016 na Leden 2016.
Pomohl Vám návod? Sdílejte na Facebooku, G+ |
||
LinkedIn... |
Stránky o MS Office (Excel) produktu společnosti Microsoft. Neslouží jako technická podpora.
| Email na autora: pavel.lasak@gmail.com | Copyright © : Pavel Lasák 2004 - 2024 |