Přeskočit navigaci | Přeskočit na novinky

Jste zde: Úvodní stránka » excel » vba-formulare » excel-vba-dialogove-okno-msgbox
Logo pokročilý expert

MsgBox - dialogové okno - VBA Excel


Videokurzy Excel

Ve spolupráci se SEDUO jsem vytvořil několik videokurzů:

... použití dialogového okna ...

17.7.2014: Doplněno a aktualizováno.

Přehled kapitol

Microsoft Excel logo

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:


Trocha teorie

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).

Syntaxe:

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

Popis argumentů:

  • prompt - Povinné. Výraz zobrazený jako zpráva v dialogu. Délka max. 1024 znaků
  • buttons - Nepovinné. Číslo - je součtem čísel udávající zobrazená tlačítka, ikonu a předvoleného tlačítka. Nebo lze použít konstantu udávající typ tlačítka. Výchozí hodnota 0.
  • title Nepovinné. Záhlaví dialogu. Pokud není uveden je v záhlaví název aplikace.
  • helpfile - Nepovinné. Název souboru s nápovědou. Povinné pokud je uveden context
  • context - Nepovinné. Číslo kontextové nápovědy přiřazené odpovídajícímu heslu. Pouze v případě, že je uveden helpfile.

Poznámka k nastavení: Chcete-li některé poziční argumenty vynechat, musíte vložit odpovídající počet čárek.

Buttons

Buttons skládá se ze čtyř skupin:

  1. (0–5) popisuje počet a typ tlačítek zobrazených v dialogu
  2. (16, 32, 48, 64) určuje styl ikony
  3. (0, 256, 512) určuje výchozí tlačítko
  4. (0, 4096) určuje režim dialogu

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

První dialogové okno

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
MS Excel msgbox

Okno odpověď ANO NE

Varianta 1

     i = MsgBox("Chcete větší plat?", vbYesNo, "Plat")

Varianta 2

     i = MsgBox("Chcete větší plat?", 4, "Plat")
MS Excel msgbox

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

Poznámka

Pokud využíváte tlačítka doporučuji prostudovat kapitolu:

Přerušit Opakovat Přeskočit

MS Excel msgbox

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):

  • vbOKOnly - 0 - - Zobrazí pouze tlačítko OK
  • VbOKCancel - 1 - - Zobrazí tlačítka OK a Storno.
  • VbAbortRetryIgnore - 2 - - Zobrazí tlačítka Přerušit Opakovat Přeskočit (některé verze Windows 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

Poznámka: Některé popisy se mohou mírně lišit na základě verze a nastavení MS Windows.

Poznámka

Pokud využíváte tlačítka doporučuji prostudovat kapitolu:

Dialogové okno s ikonou a tlačítkem

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
MS Excel msgbox
MS Excel msgbox MS Excel msgbox MS Excel msgbox

Nastavení ikonek jsou následující (Konstanta - Hodnota - Popis):

  • 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

Poznámka: Tlačítko OK doplní VBA automaticky.

Poznámka

Pokud využíváte tlačítka doporučuji prostudovat kapitolu:

Dialogové okno: text do více řádku

    MsgBox "První řádek" & vbCrLf & "Druhý řádek" & vbCrLf & "Třetí řádek"
MS Excel msgbox

Dialogové okno speciální znaky

    MsgBox Chr(200) & " jiný znak " & Chr(244)
MS Excel msgbox

Dialogové okno - hodnota z buňky

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
MS Excel msgbox

Dialogové okno vše dohromady

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 ! ! ")
MS Excel msgbox

Návratové hodnoty

Vracené hodnoty na základě zvolených tlačítek (Konstanta - Hodnota - - Popis)

  • vbOK - 1 - - OK
  • vbCancel - 2 - - Storno
  • vbAbort - 3 - - Zpět
  • vbRetry - 4 - - Znovu
  • vbIgnore - 5 - - Ignorovat
  • vbYes - 6 - - Ano
  • vbNo - 7 - - Ne

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

Přednastavené tlačítko

Pokud se nelíbí první vybrané tlačítko. Jak definovat (Konstanta - Hodnota - - Popis):

  • VbDefaultButton1 - 0 - - Výchozí je první tlačítko.
  • VbDefaultButton2 - 256 - - Výchozí je druhé tlačítko.
  • VbDefaultButton3 - 512 - - Třetí tlačítko.
  • VbDefaultButton4 - 768 - - Čtvrté tlačítko.

Jednotlivé kódy se sčítají, výsledná hodnota je součtem požadovaných tlačítek, ikon, přednastaveného tlačítka..

Doplnění MsgBox o nápovědu

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)

MsgBox bez aktivního X

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.

MsgBox zadávat hodnoty

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.

Ke stažení

Hotové ukázkové příklady ke stažení: Dialogové okno - MsgBox - VBA Excel - prakticky. soubor ve formátu *.xls

Závěrem

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

Odměna

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.


Pavel Lasák - autor webu

Pavel Lasák

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ů.

   Pavel Lasák LinkedIn Profil    Pavel Lasák Google+ Profil    Pavel Lasák facebook Profil    Pavel Lasák twitter Profil


Komentáře


m.thums

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

Pavel Lasák

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ě

J.P.

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ěď

Pavel Lasák

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

Petra

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

Pavel Lasák

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/

Petra

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

Libor Sztacho

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

Pavel Lasák

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

Petr Pecháček

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ě.

Petr Pecháček

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.

Pavel Lasák

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.

Karel Musil

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

Jirka_111

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?)

Jirka_111

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

Jojo

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)

Jojo

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)

Dan78

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 :-)

Jojo

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

Laďa

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.

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?

Jojo

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

Laďa

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.

Jojo

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)

Laďa

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.

Martin

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.

Jojo

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

Laďa

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.

kalmero

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

Kuba

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,

Pavel

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

Borny

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.






Excel


Sdílejte

Pomohl Vám návod?
Sdílejte na Facebooku, G+
LinkedIn...

Nové články


Reklama


TOPlist Licence Creative Commons webarchiv rss XML

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 |