Funkcja MsgBox
Przykłady opisane w tej lekcji dostępne są w
arkuszu Excela: VBA.xlsm, tylko
ich samodzielne przerobienie daje gwarancję zapamiętania tej lekcji.
Przykłady dla wszystkich lekcji szkolenia
Excel 2003: ExcelSzkolenie.pl
Cwiczenia Excel 2013.zip
Ta lekcja może być
obejrzana lub przeczytana poniżej.
Film wygląda
najlepiej jeśli będzie odtwarzany w rozdzielczości 720p HD, rozdzielczość można
zmienić dopiero po uruchomieniu filmu klikając na ikonie trybika
która pojawi się w prawym dolnym
rogu poniższego ekranu. Po kilku sekundach od zmiany obraz wyostrzy się.
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
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, Twój 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.
Dzięki vbExclamation
wyświetlana jest ikona Komunikat Ostrzegawczy.
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
z karty ‘DEWELOPER’ wybrać ikonę ‘Wstaw’ a następnie ikonę przycisk z grupy
ikon ‘Kontrolki formularza’.
Po wybraniu opisanej powyżej
ikony klikamy 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 tekst i wprowadzając nowy.
Wielkość przycisku
możemy zmieniać wybierając przycisk kliknięciem prawego przycisku myszy, po
czym rozciągamy/zwężamy go ciągnąc za jeden z kwadracików na jego rogach lub
bokach.
Makro jest gotowe do
użytku, przed przejściem do drukowania wyświetli poniższy komunikat, aby
upewnić się że przycisk nie został kliknięty przypadkiem.