Funkcja MsgBox

Przykłady opisane w tej lekcji dostępne są w arkuszu Excela: VBA.xls, tylko ich samodzielne przerobienie daje gwarancję zapamiętania tej lekcji.

Przykłady dla wszystkich lekcji szkolenia Excel 2003: ExcelSzkolenie.pl Cwiczenia Excel 2003.zip

 

 

Funkcja MsgBox umożliwia wyświetlanie komunikatów na ekranie, w zależności od wybranych parametrów może wyświetlać różne przyciski, to co użytkownik wybierze ma wpływ na to jakie czynności wykona makro.

Funkcja MsgBox jest bardzo użyteczna, ponieważ umożliwia łatwą komunikację z użytkownikiem makra.

 

Zacznijmy od prostego przykładu:

 

 

Przykład 1.

 

 

Sub MsgBox_Przyklad_1()

MsgBox "Tak wygląda standardowe okno funkcji MsgBox"

End Sub

 

 

Powyższe makro wyświetli okno:

 

 

Ale funkcja to oferuje znacznie więcej niż tylko wyświetlanie komunikatów, które można tylko zaakceptować. Przejdźmy więc do jej składni.

 

 

 

Składnia:

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

 

prompt – to tekst jaki ma się wyświetlać, to jedyna konieczna składowa tej funkcji

buttons – za pomocą tej stałej wybieramy jakie przyciski mają zostać wyświetlone

title – tytuł okienka z naszym tekstem, jeżeli nie podamy tytułu, zostanie wyświetlony napis: Microsoft Excel

helpfile – pomoc, opcja nie jest używana przy prostych makrach

context – kontekst, opcja ta nie jest używana przy prostych makrach

 

Poniżej przedstawiam opcje jakie posiada funkcja MsgBox, najczęściej korzysta się zaledwie z kilku pierwszych z nich.

 

Stała

Opis

vbOKOnly

Wyświetlany jest tylko przycisk OK., tak samo jak wtedy gdy nic nie zostanie wybrane.

vbOKCancel

Wyświetlane są przyciski OK i Anuluj

vbAbortRetryIgnore

Wyświetlane są przyciski Przerwij, Ponów i Ignoruj

vbYesNoCancel

Wyświetlane są przyciski Tak, Nie i Anuluj

vbYesNo

Wyświetlane są przyciski Tak i Nie

vbRetryCancel

Wyświetlane są przyciski Ponów i Anuluj

vbCritical

Wyświetlana jest ikona Komunikat Krytyczny

vbQuestion

Wyświetlana jest ikona Pytanie Ostrzegawcze

vbExclamation

Wyświetlana jest ikona Komunikat Ostrzegawczy

vbInformation

Wyświetlana jest ikona Komunikat Informacyjny

vbDefaultButton1

Pierwszy przycisk jest wybrany jako domyślny

vbDefaultButton2

Drugi przycisk jest wybrany jako domyślny

vbDefaultButton3

Trzeci przycisk jest wybrany jako domyślny

vbDefaultButton4

Czwarty przycisk jest wybrany jako domyślny

vbApplicationModal

Użytkownik musi odpowiedzieć na pytanie przed kontynuowaniem pracy z Excelem

vbSystemModal

Okienko komunikatu będzie na wierzchu nawet po przejściu do innych aplikacji.

vbMsgBoxHelpButton

Dodaje przycisk Pomoc

 

 

 

Przykład 2.

 

 

Sub MsgBox_Przyklad_2()

MsgBox "Czy możemy kontynuować?  ", vbYesNo + vbQuestion, "Pytanie 1"

End Sub

 

 

Powyższe makro wyświetli okno takie jak poniżej.

 

vbYesNo – spowodowało wyświetlenie przycisków Tak i Nie.

vbQuestion – dodało ikonę ze znakiem zapytania

Połączenie 2 stałych następuje przez wpisanie pomiędzy nimi znaku +

Po drugim przecinku znajduje się tytuł „Pytanie 1”.

 

 

To czy użytkownik wybierze w ‘Tak’ czy ‘Nie’ nie ma w przypadku tego makra najmniejszego znaczenia, ponieważ nie robi ono nic poza wyświetleniem powyżej pokazanego okna.

 

 

 

Przykład 3.

 

Aby to co wybierze użytkownik mogło zostać wykorzystane w kodzie makra najwygodniej będzie przypisać wartość funkcji MsgBox do zmiennej.

Funkcja MsgBox przyjmuje wartości liczbowe od 1 do 7 przedstawione w poniższej tabeli.

 

Stała

Wartość

Opis

vbOK

1

Użytkownik wybrał OK

vbCancel

2

Użytkownik wybrał Anuluj

vbAbort

3

Użytkownik wybrał Przerwij

vbRetry

4

Użytkownik wybrał Ponów

vbIgnore

5

Użytkownik wybrał Ignoruj

vbYes

6

Użytkownik wybrał Tak

vbNo

7

Użytkownik wybrał Nie

 

W poniższym przykładzie wynik tego co wybierze użytkownik makra przypisywane jest do zmiennej ‘odpowiedź’.

W kolejnej linii kodu jeśli odpowiedź wynosi 6 (użytkownik wybrał Tak) wyświetlany jest komunikat „Wybrano: Tak” w przeciwnym razie wyświetlany jest komunikat „Wybrano: Nie”.

 

Sub MsgBox_Przyklad_3()

Odpowiedź = MsgBox("Czy możemy kontynuować", vbYesNo + vbQuestion, "Pytanie 1")

If Odpowiedź = 6 Then MsgBox "Wybrano: Tak" Else MsgBox "Wybrano: Nie"

End Sub

 

      

 

Równie dobrze wartość liczbową możemy zastąpić stałą jej odpowiadającą czyli dla liczby 6, vbYes. Poniższe makro, będzie działać dokładnie tak samo.

 

 

Sub MsgBox_Przyklad_3A()

Odpowiedź = MsgBox("Czy możemy kontynuować", vbYesNo + vbQuestion, "Pytanie 1")

If Odpowiedź = vbYes Then MsgBox "Wybrano: Tak" Else MsgBox "Wybrano: Nie"

End Sub

 

 

Makro będzie krótsze jeżeli zamiast przypisania wartości MsgBox do zmiennej od razu użyjemy jej w konstrukcji If.

Poniższe makro będzie działać dokładnie tak samo.

 

 

Sub MsgBox_Przyklad_3B()

If MsgBox("Czy możemy kontynuować", vbYesNo + vbQuestion, "Pytanie 1") = _

vbYes Then MsgBox "Wybrano: Tak" Else MsgBox "Wybrano: Nie"

End Sub

 

 

Przypisywanie wartości do zmiennej daje możliwość wykorzystania tej danej w wielu miejscach kodu i jego większa użyteczność jest widoczna przy dłuższych makrach.

 

 

 

Przykład 4.

 

W poniższym przykładzie użyto:

vbCrLf                         Polecenie powoduje przejście do kolejnej linii, użycie go dwukrotnie wstawia pustą linię.

&                                 Łączy tekst (znajdujący się zawsze pomiędzy znakami ””) z wartościami zmiennych i jak w naszym przypadku przejściem do kolejnej linijki

vbCritical                    Ikona Komunikat Krytyczny dodaje dramatyzmu tej wiadomości

vbSystemModal          Powoduje, że okienko będzie zawsze na wierzchu nawet jeśli przejdziemy do innych aplikacji

 

 

Sub MsgBox_Przyklad_4()

MsgBox "Czy wolisz sformatować dysk Twardy C czy wykasować jego zawartość?" & vbCrLf & vbCrLf & _

 "Wybierz Tak aby sformatować C, wybierze Nie aby tylko wykasować zawartość dysku C." _

, vbYesNo + vbCritical + vbSystemModal, "Trudny Wybór"

End Sub

 

 

 

Makro to oczywiście nie robi nic poza wyświetleniem tego komunikatu, dysk twardy C jest bezpieczny.

 

 

 

Przykład 5.

 

 

Sub MsgBox_Przyklad_5()

MsgBox "W tym przykładzie ustawiliśmy 2 przycisk jako domyślny", vbYesNoCancel + vbDefaultButton2 + vbExclamation, "Przykład 5"

End Sub

 

 

Korzystając z vbDefaultButton2 jako domyślny ustawiliśmy drugi przycisk.

 

 

 

 

Przykład 6.

 

W tym przykładzie napiszemy makro, które po wciśnięciu przycisku znajdującego się w arkuszu Excela zapyta czy użytkownik na pewno chce wydrukować cały arkusz i jeśli odpowiedź będzie twierdząca rozpocznie drukowanie.

 

Podczas wprowadzania kodu makr Excel podpowiada jakie elementy kodu mogą być wprowadzone w danym miejscu i ogranicza listę podczas pisania tylko do tych, które zaczynają się tak samo jak tekst już przez nas wprowadzony, jest to dużym ułatwieniem gdy np. nie jesteśmy pewni pisowni polecenia, które chcemy użyć. Wyświetlane są też składnie funkcji i procedur, dzięki czemu nie musimy dokładnie pamiętać jaka jest kolejność elementów składowych funkcji.

 

 

 

Poniżej pełny kod makra.

Jeżeli użytkownik wybierze nie (‘=vbNo’) wtedy (‘Then’) wykonywana jest komenda ‘Exit Sub’ powodująca zakończenie makra.

W przeciwnym razie wykonywane są kolejne polecenia zapisane w kodzie makra, w tym przypadku drukowanie.

 

 

Powyższe makro wyświetla następujący komunikat:

 

 

Jednym ze sposobów uruchomienia makra jest przypisanie go do przycisku znajdującego się w arkuszu Excela. Aby to zrobić należy pokazać pasek narzędzi ‘Formularze’

 

 

Na pasku narzędzi ‘Formularze’ klikamy ikonę ‘Przycisk’ lewym klawiszem myszy i zwalniamy go, po czym klikamy także lewym klawiszem w miejscu gdzie przycisk ma się znaleźć i trzymając cały czas wciśnięty lewy klawisz przeciągamy myszą, określając w ten sposób wielkość przycisku.

 

 

Po wykonaniu przycisku samoczynnie otwiera się okno umożliwiające przypisanie do niego makra, wybieramy nasze makro i klikamy przycisk ‘OK’.

Tekst wyświetlany na przycisku zmieniamy klikając na nim, kasując obecny teks i wprowadzając nowy.

 

 

Wielkość przycisku możemy zmieniać wybierając przycisk kliknięciem, po czym rozciągamy/zwężamy go ciągnąc za jeden z jego rogów.

 

 

Makro jest gotowe do użytku.

 

 

Szkolenie Excel 2003                            Szkolenie Excel 2007