Okno MsgBox w Excel VBA

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.

Kurs Excel VBA - Okno MsgBox
Kurs Excel VBA – Okno MsgBox

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łaOpis
vbAbortRetryIgnoreWyświetla przyciski Przerwij, Ponów próbę i Ignoruj
vbApplicationModalWyświetla okno modalne. Komunikat wstrzymuje wykonywanie bieżącej aplikacji dopóki nie klikniemy przycisku OK
vbCriticalWyświetla komunikat w formie ikony błędu krytycznego i przycisku OK
vbDefaultButton1Wyświetla przycisk pierwszy jako domyślny
vbDefaultButton2Wyświetla przycisk drugi jako domyślny
vbDefaultButton3Wyświetla przycisk trzeci jako domyślny
vbDefaultButton4Wyświetla przycisk czwarty jako domyślny
vbExclamationWyświetla komunikat w formie ikony ostrzeżenia i przycisku OK
vbInformationWyświetla komunikat w formie ikony informacji i przycisku OK
vbMsgBoxHelpButtonWyświetla przyciski OK i Pomoc
vbMsgBoxRightWyświetla komunikat od prawej do lewej strony
vbMsgBoxRtlReadingWyświetla okno w formie od prawej do lewej strony
VbMsgBoxSetForegroundWyświetla komunikat na pierwszym planie
vbOKCancelWyświetla przyciski OK i Cancel
vbOKOnlyWyś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
vbQuestionWyświetla przycisk OK i ikonę znaku zapytania
vbRetryCancelWyświetla przyciski Ponów próbę i Anuluj
vbSystemModalWyświetla okno modalne. Komunikat wstrzymuje wykonywanie wszystkich aplikacji dopóki nie klikniemy przycisku OK
vbYesNoWyświetla przyciski Tak i Nie
vbYesNoCancelWyś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łaWartość liczbowaOpis
vbOK1Naciśnięto przycisk OK
vbCancel2Naciśnięto przycisk Anuluj
vbAbort3Naciśnięto przycisk Przerwij
vbRetry4Naciśnięto przycisk Ponów
vbIgnore5Naciśnięto przycisk Ignoruj
vbYes6Naciśnięto przycisk Tak
vbNo7Naciś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”.

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

13 komentarzy “Okno MsgBox w Excel VBA”