Okno MsgBox – prezentacja danych
Okno MsgBox poznaliśmy przy okazji pisania naszego pierwszego programu. Okno tej funkcji jest jedną z wielu możliwości prezentacji danych za pomocą kodu VBA w Excel. Może nam posłużyć do wyświetlenia dowolnego komunikatu, wyniku naszego programu itp. Poniżej przykład wyświetlenia okna MsgBox z komunikatem o dowolnej treści:
Sub MsgBoxExample() MsgBox "Treść komunikatu" End Sub
Jak wyświetlić komunikat MsgBox podczas otwierania pliku Excel?
Okno MsgBox prócz wyświetlania komunikatu posiada wiele innych parametrów. Możemy np ustawić tytuł okna, jego wielkość itp. Jeśli chcielibyśmy, by np okno posłużyło nam do wyświetlenia komunikatu podczas otwierania pliku Excel możemy zrobić to w następujący sposób. Otwieramy edytor VisualBasic w karcie Developer. W lewej zakładce Project edytora z MicrosoftExcelObject wybieramy „Ten_skoroszyt”. W lewej górnej liście wybieramy obiekt „Workbook”, a w prawej „Open” jako wyzwalacz. Wpisujemy do naszego edytora następujący komunikat, który będzie wyświetlany przy każdorazowym otwarciu naszego pliku Excel:
Sub Workbook_Open()
MsgBox ("Witaj w programie, miłego dnia")
End Sub
Pamiętajmy, by wszystko zadziałało poprawnie, plik Excel zapisujemy w formacie xlsm, a więc skoroszyt Excel z obsługą makr. Musimy mieć oczywiście włączoną obsługę makr w naszym programie Excel.
Możemy także na początek zdefiniować zmienną, która będzie odpowiedzialna za treść komunikatu, a następnie użyć ją w naszym komunikacie:
Sub MsgBoxExample()
Dim strKomunikat as String
strKomunikat = "Treść komunikatu"
MsgBox strKomunikat
End Sub
Okno MsgBox – argumenty funkcji
Jak wcześniej wspomniałem, okno MsgBox posiada szereg dodatkowych opcji, prócz samej prezentacji. Pełny model funkcji MsgBox wygląda następująco:
Function MsgBox(Prompt, [Buttons As VbMsgBoxStyle = vbOKOnly], [Title], [HelpFile], [Context]) As VbMsgBoxResult
Możemy zaprogramować takie argumenty jak:
Prompt – jest to jedyny argument obowiązkowy. Wprowadzamy tutaj tekst, bądź wartości, które chcemy wyświetlić w naszym komunikacie.
Buttons – argument nie jest obowiązkowy. Określamy w nim styl okna i m.in.rodzaj przycisków, które wyświetlone zostaną w komunikacie. Tabelka ze wszystkimi możliwymi przyciskami zamieszczona jest poniżej. Jeśli nie określimy tego argumentu wyświetli nam się tylko przycisk OK. Jeśli nie zdefiniujemy stylu, automatycznie będzie to vbOKOnly, a więc sam przycisk „OK”.
Title – argument nie jest obowiązkowy. W argumencie Title definiujemy tytuł okna MsgBox.
HelpFile – argument nie jest obowiązkowy. Argument określa odniesienie do pliku pomocy. Sam numer pliku pomocy wpisujemy w argumencie Context.
Context – argument nie jest obowiązkowy. W argumencie odnosimy się za pomocą wartości numerycznej do określonego w poprzednim argumencie HelpFile pliku pomocy.
Warto zaznaczyć, że jeśli nie chcemy używać niektórych argumentów, wystarczy, że oddzielimy je przecinkami np:
MsgBox "Treść", , "Tytuł okna"
Poniżej opis wszystkich opcji dla argumentu buttons:
Stała | Opis |
vbAbortRetryIgnore | Wyświetla przyciski Przerwij, Ponów próbę i Ignoruj |
vbApplicationModal | Wyświetla okno modalne. Komunikat wstrzymuje wykonywanie bieżącej aplikacji dopóki nie klikniemy przycisku OK |
vbCritical | Wyświetla komunikat w formie ikony błędu krytycznego i przycisku OK |
vbDefaultButton1 | Wyświetla przycisk pierwszy jako domyślny |
vbDefaultButton2 | Wyświetla przycisk drugi jako domyślny |
vbDefaultButton3 | Wyświetla przycisk trzeci jako domyślny |
vbDefaultButton4 | Wyświetla przycisk czwarty jako domyślny |
vbExclamation | Wyświetla komunikat w formie ikony ostrzeżenia i przycisku OK |
vbInformation | Wyświetla komunikat w formie ikony informacji i przycisku OK |
vbMsgBoxHelpButton | Wyświetla przyciski OK i Pomoc |
vbMsgBoxRight | Wyświetla komunikat od prawej do lewej strony |
vbMsgBoxRtlReading | Wyświetla okno w formie od prawej do lewej strony |
VbMsgBoxSetForeground | Wyświetla komunikat na pierwszym planie |
vbOKCancel | Wyświetla przyciski OK i Cancel |
vbOKOnly | Wyświetla wyłącznie przycisk OK. Przycisk wyświetla się z defaultu. Tzn. Jeśli go nie zdefiniujemy, wyświetli nam się właśnie ten styl |
vbQuestion | Wyświetla przycisk OK i ikonę znaku zapytania |
vbRetryCancel | Wyświetla przyciski Ponów próbę i Anuluj |
vbSystemModal | Wyświetla okno modalne. Komunikat wstrzymuje wykonywanie wszystkich aplikacji dopóki nie klikniemy przycisku OK |
vbYesNo | Wyświetla przyciski Tak i Nie |
vbYesNoCancel | Wyświetla przyciski Tak, Nie i Anuluj |
Jak wykorzystać wynik zwrócony przez przyciski okna MsgBox?
W zależności od tego, których przycisków będziemy używali w naszych aplikacjach, nasz program może zachowywać się różnie w przypadku naciśnięcia przycisków OK, Anuluj, Tak, Nie itp. Po naciśnięciu przycisku w oknie MsgBox otrzymujemy zwrot, który możemy użyć w naszej aplikacji i zaprogramować wedle uznania. Poniżej wartości stałych zwracane po naciśnięciu przycisków oknie MsgBox:
Stała | Wartość liczbowa | Opis |
vbOK | 1 | Naciśnięto przycisk OK |
vbCancel | 2 | Naciśnięto przycisk Anuluj |
vbAbort | 3 | Naciśnięto przycisk Przerwij |
vbRetry | 4 | Naciśnięto przycisk Ponów |
vbIgnore | 5 | Naciśnięto przycisk Ignoruj |
vbYes | 6 | Naciśnięto przycisk Tak |
vbNo | 7 | Naciśnięto przycisk Nie |
Przykłady wykorzystania okna MsgBox
Poznaliśmy już okno MsgBox. Stwórzmy kilka prostych programów z użyciem najważniejszych funkcjonalności okna.
Na początek wyświetlmy okno MsgBox o tytule „Moje okno programu” i wyświetlające komunikat „Witaj Użytkowniku”
Sub MsgBoxExample()
MsgBox ("Witaj w programie, miłego dnia")
'Wstawiony został sam komunikat
End Sub
Następnie utwórz okno z takim samym komunikatem i nadajmy mu tytuł „Moje okno programu”
Sub MsgBoxExample1()
MsgBox "Witaj Użytkowniku", , "Moje okno programu"
'Wstawiony został komunikat i tytuł okna
End Sub
Stwórzmy okno informujące o wystąpieniu błędu krytycznego, a więc z ikoną błędu krytycznego. Komunikat, który powinien się wyświetlić to „Wystąpił błąd programu”. Tytuł okna to „Błąd krytyczny”
Sub MsgBoxExample2()
MsgBox "Wystąpił błąd programu", vbCritical, "Błąd krytyczny"
'Wstawione zostały:Komunikat o błędzie krytycznym, tytuł okna
End Sub
Co ważne, w drugim argumencie funkcji MsgBox możemy wprowadzić więcej opcji niż jedna. Dla przykładu możemy jednocześnie użyć stałych informujących o błędzie krytycznym, zapytania tak/nie itp. Jeśli chcemy to zrobić, łączymy style za pomocą znaku „+”. Poniżej przykład, w którym wstawimy jednocześnie przyciski Tak/Nie/Anuluj oraz komunikat z ikoną zapytania. Wartość o nazwie DefaultButton2 informuje nas o tym, że z defaultu zaznaczony jest drugi przycisk, a więc w naszym przypadku „Nie”. Wypełniamy także tytuł i treść komunikatu wartościami „Czy jesteś doświadczonym programistą?” oraz „Odpowiedz na pytanie”. Dodatkowo każdą wartość w komunikacie zdefiniujmy wcześniej jako zmienne:
Sub MsgBoxExample4()
Dim strPrompt As String
Dim strStyle As String
Dim strTitle As String
strPrompt = "Czy jesteś doświadczonym programistą?"
strStyle = vbQuestion + vbYesNoCancel + vbDefaultButton2
strTitle = "Odpowiedz na pytanie"
MsgBox strPrompt, strStyle, strTitle
End Sub
Poniżej zmodyfikujmy nasz przykład z poprzedniego zadania. Po kliknięciu przez użytkownika przycisków Tak lub nie wstawmy odpowiednie komunikaty o treściach „Gratulacje !!!”, bądź „Ćwicz dalej !!!”. Musimy użyć tutaj instrukcji warunkowej If Then Else, o której szerzej piszę w tym artykule. Wykorzystajmy zwrot z pierwszego komunikatu o nazwach vbYes i vbNo. Dla przycisku Anuluj nie przewidujemy żadnego działania, a więc zamknie on po prostu nasze okno. Warto zaznaczyć, że zamiast stałej vbYes możemy także wpisać liczbę 6. Działanie będzie tutaj identyczne zgodnie z naszą tabelką wartości zwracanych z okna.
Sub MsgBoxExample5()
Dim strPrompt As String
Dim strStyle As String
Dim strTitle As String
Dim StrResponse As String
strPrompt = "Czy jesteś doświadczonym programistą?"
strStyle = vbQuestion + vbYesNoCancel + vbDefaultButton2
strTitle = "Odpowiedz na pytanie"
StrResponse = MsgBox(strPrompt, strStyle, strTitle)
'Wstawione zostały:Komunikat z ikoną znaku zapytania, odpowiedziami tak, nie, anuluj , defaultbutton oraz tytułem
If StrResponse = vbYes Then
MsgBox "Gratuluję !!!"
ElseIf StrResponse = vbNo Then
MsgBox "Ćwicz dalej !!!"
End If
End Sub
Wszystkie przykłady z tego rozdziału zamieszczam w poniższym pliku:
kurs_excel_vba_msgbox
Zadania (Rozwiązanie możesz wpisać w komentarzu)
1 Napisz program dla okna posiadającego tytuł, komunikat z dowolną treścią, przyciski Tak i Nie. Przycisk Nie powinien być ustawiony jako przycisk Default. Sam komunikat wyświetl jako okno z ikoną zapytania.
2 Zmodyfikuj przykład 5.5. Ustaw komunikat o treści „Anulowano” dla kliknięcia w przycisk „Anuluj”.
13 komentarzy “Okno MsgBox w Excel VBA”
Czym różni się okno z nawiasami od tego bez nawiasów? Czy da sie je stosować zamiennie?
Zadanie Nr. 2
Sub MsgBoxExample5()
Dim strPrompt As String
Dim strStyle As String
Dim strTitle As String
Dim StrResponse As String
strPrompt = „Czy jesteś doświadczonym programistą?”
strStyle = vbQuestion + vbYesNoCancel + vbDefaultButton2
strTitle = „Odpowiedz na pytanie”
StrResponse = MsgBox(strPrompt, strStyle, strTitle)
'Wstawione zostały:Komunikat z ikoną znaku zapytania, odpowiedziami tak, nie, anuluj , defaultbutton oraz tytułem
If StrResponse = vbYes Then
MsgBox „Gratuluję !!!”
ElseIf StrResponse = vbNo Then
MsgBox „Ćwicz dalej !!!”
ElseIf StrResponse = vbCancel Then
MsgBox „Anulowano !!!”
End If
W tym miejscu:
If StrResponse = vbYes Then
MsgBox “Gratuluję !!!”
ElseIf StrResponse = vbNo Then
MsgBox “Ćwicz dalej !!!”
ElseIf StrResponse = vbCancel Then
MsgBox “Anulowano !!!”
zamiast:
ElseIf StrResponse = vbCancel Then
MsgBox “Anulowano !!!”
można użyć:
Else: MsgBox “Anulowano !!!”
Jak najbardziej. Możliwości, które możemy zastosować jest wiele
Zadanie nr. 1
Sub msgboxExample4()
MsgBox „Czy jesteś zainteresowany ofertą?”, vbYesNo + vbDefaultButton2 + vbQuestion
End Sub
Private Sub Workbook_Open()
MsgBox „Dowolna treść komunikatu”, vbYesNo + vbDefaultButton2 + vbQuestion, „Dowolny tytuł”
End Sub
Sub druga_czesc()
Dim promptdc As String
Dim styledc As String
Dim titledc As String
Dim responsedc As String
promptdc = „Przykładowe pytanie”
styledc = vbQuestion + vbYesNoCancel + vbDefaultButton2
titledc = „Przykładowy tytuł”
responsedc = MsgBox(promptdc, styledc, titledc)
If responsedc = vbYes Then
MsgBox „Dałeś YES”
ElseIf responsedc = vbNo Then
MsgBox „Dałeś NO”
ElseIf responsedc = vbCancel Then
MsgBox „Anulowano”
End If
End Sub
Witam. Mam pytanie. W Excel jest możliwe zamieszczenie maka,które przed zamknięciem będzie przypominać o wymaganych czynnościach?.
zp. Krzysztof B
6.2 Sub pytanie()
Dim pyt As String
pyt = „czy lubisz ocenę sześć?”
Dim styl As String
Dim tytul As String
tytul = „proszę o odpowiedz”
styl = vbQuestion + vbRetryCancel + vbDefaultButton2
odp = MsgBox(pyt, styl, tytul)
If odp = vbYes Then
MsgBox „Gratuluję”
ElseIf odp = vbCancel Then
MsgBox „anulowano”
End If
end sub
Witam.
Jak usunąć (wyłaczyć?) MsgBox?
Jak usunąć lub wyłączyć MsgBox pojawiający się w momencie uruchomienia pliku Excel?
usunąć go z kodu. szukaj frazy msgbox. Jeśli natomiast jesteś użytkownikiem czyjegoś programu, wyłącz makra bez powiadomienia. Powinno być to opisaće w 1-4 rozdziale kursu, pozdr. Tomasz
Sub MsgBoxExample5()
Dim strPrompt As String
Dim strStyle As String
Dim strTitle As String
Dim StrResponse As String
strPrompt = „Czy jesteś doświadczonym programistą?”
strStyle = vbQuestion + vbYesNoCancel + vbDefaultButton2
strTitle = „Odpowiedz na pytanie”
StrResponse = MsgBox(strPrompt, strStyle, strTitle)
'Wstawione zostały:Komunikat z ikoną znaku zapytania, odpowiedziami tak, nie, anuluj , defaultbutton oraz tytułem
If StrResponse = vbYes Then
MsgBox „Gratuluję !!!”
Cells(vbYes, 1) = vbYes
Cells(vbYes, 1).Interior.ColorIndex = 8
ElseIf StrResponse = vbNo Then
MsgBox „Ćwicz dalej !!!”
Cells(vbNo, 1) = vbNo
Cells(vbNo, 1).Interior.ColorIndex = 9
ElseIf StrResponse = vbCancel Then
MsgBox „Spróbuj następnym razem”
Cells(vbCancel, 1) = vbCancel
Cells(vbCancel, 1).Interior.ColorIndex = 7
End If
End Sub