Funkcja MsgBox jest jedną z pierwszych, które poznaje osoba ucząca się języka VBA. Składnia tej funkcji wygląda następująco:MsgBox (PROMPT,BUTTONS, TITLE, HELPFILE, CONTEXT)- Parametr PROMPT - treść w oknie komunikatu - jest to jednocześnie jedyny wymagany parametr. Może być zmienną aplikacji,- Parametr BUTTONS - symbole i przyciski w oknie komunikatu - domyślnie (tzn. wartość nie podana) brak symbolu i jeden przycisk 'OK',- Parametr TITLE - tytuł okna komunikatu - domyślnie (tzn. wartość nie podana) napis 'Microsoft Excel',- Parametr HELPFILE - wskazanie pliku pomocy aplikacji (przy bardzo zaawansowanych produkcjach),- Parametr CONTEXT - wskazanie numeru kontekstu pomocy (przy bardzo zaawansowanych produkcjach),Parametry możemy określać przez pozycję lub przez nazwę np. a) MsgBox Title:="Uwaga", Buttons:=4, Prompt:="Wystąpił błąd programu" - składnia podaje trzy parametry przez podanie ich nazwy (kolejność dowolna, nie trzeba używać przecinków dla zasygnalizowania nieistniejących parametrów, nie można używać samego znaku '=' tylko znak ':='),b) MsgBox "Uwaga", 4, "Wystąpił błąd programu" - składnia podaje trzy parametry (efekt jak wyżej), ale program rozpoznaje je po kolejności w jakiej występują. Jeżeli nie chcemy podawać wartości Buttons składnia wyglądałaby tak:MsgBox "Uwaga", , "Wystąpił błąd programu",Powyższe przykłady traktują MsgBox jak polecenie. Jeżeli chcemy pobrać wartość zwrotną (użytkownik ma mieć wpływ na dalsze działanie programu) należy przypisać wartość MsgBox do zmiennej np. typu Long lub Integer (wtedy parametry polecenia stają się parametrami funkcji i jako takie muszą zostać ujęte w nawiasy) np. Odpowiedz = MsgBox (Title:="Uwaga", Buttons:=4, Prompt:="Wystąpił błąd programu")Jeszcze jedna uwaga - zamiast numerów przycisków warto używać nazw stałych dostępnych w podpowiedziach edytora (również przy analizowaniu kodu są bardziej czytelne).Teraz kilka zestawień:Pierwsza grupa - wartości od 0 do 5 opisują numery i typy przycisków wyświetlanych w oknie:- wartość 0 - tylko przycisk 'OK' (stała vbOKOnly),- wartość 1 - przyciski 'OK' i 'Anuluj' (stała vbOKCancel),- wartość 2 - przyciski 'Przerwij', 'Ponów próbę' i 'Zignoruj' (stała vbAbortRetryIgnore),- wartośc 3 - przyciski 'Tak', 'Nie' i 'Anuluj' (stała vbYesNoCancel),- wartość 4 - przyciski 'Tak' i 'Nie' (stała vbYesNo),- wartość 5 - przyciski 'Ponów próbę' i 'Anuluj' (stała vbRetryCancel),Druga grupa - wartości 16, 32, 48, 64 opisują styl ikon wyświetlanych w oknie:- wartość 16 - komunikat błędu (stała vbCritical),- wartość 32 - komunikat zapytania (stała vbQuestion),- wartość 48 - komunikat ostrzeżenia (stała vbExclamation),- wartośc 64 - komunikat informacji (stała vbInformation),Trzecia grupa - wartości 0, 256, 512 określają domyślnie wybrany przycisk:- wartość 0 - domyślny jest przycisk 1 (stała vbDefaultButton1),- wartość 256 - domyślny jest przycisk 2 (stała vbDefaultButton2),- wartość 512 - domyslny jest przycisk 3 (stała vbDefaultButton3),Czwarta grupa - wartości 0, 4096 określa modalność okna:- wartość 0 - okno musi być zamknięte by kontynuować pracę w tej aplikacji (stała vbApplicationModal),- wartość 4096 - okno musi być zamknięte by kontynuować pracę w każdej aplikacji systemu (stała vbSystemModal),Wartości zwracane przez funkcję MsgBox można odbierać pod zmienną Integer, stosując instrukcję warunkową If lub Select Case.Wartość liczbowa przycisku zaznaczonego przez użytkownika:- wartość 1 - wybrany przycisk 'OK' (stała vbOK),- wartość 2 - wybrany przycisk 'Anuluj' (stała vbCancel),- wartość 3 - wybrany przycisk 'Przerwij' (stała vbAbort),- wartośc 4 - wybrany przycisk 'Ponów próbę' (stała vbRetry),- wartość 5 - wybrany przycisk 'Zignoruj' (stała vbIgnore),- wartość 6 - wybrany przycisk 'Tak' (stała vbYes),- wartość 7 - wybrany przycisk 'Nie' (stała vbNo),Maksymalna długość napisu wyświetlanego w oknie komunikatu nie może przekraczać 1024 znaków.
Sub Przyklad_1()Dim Odpowiedz As LongOdpowiedz = MsgBox("STRAJK - przestaję pracować", _vbCritical + vbOKOnly, _"Przykład 1")End SubSub Przyklad_2()Dim Odpowiedz As LongOdpowiedz = MsgBox("Czy długo jeszcze będziemy pracować?", vbOKOnly + vbYesNo + vbApplicationModal, "Przykład 2")End SubSub Przyklad_3()MsgBox Prompt:="Zaraz odechce mi się pracować", _Buttons:=vbExclamation + vbSystemModal + vbOKCancel + vbDefaultButton1, _Title:="Przykład 3"End SubSub Przyklad_4()MsgBox "Nareszcie fajrant", _vbInformation, _"Przykład 4"End SubSub Przyklad_5()MsgBox "STRAJK - przestaję pracować" & Chr(10) & _"Czy długo jeszcze będziemy pracować?" & Chr(10) & _"Zaraz odechce mi się pracować" & Chr(10) & _"Nareszcie fajrant" & Chr(10)End SubUwagi- wykorzystany w kodach symbol ' _' (spacja i podkreślenie) pozwala pisać jedno polecenie w kilku wierszach- symbol 'Chr(10)' w ostatnim kodzie to znak przejścia do następnej linijki- znak '&' pozwala między innymi łączyć łańcuchy tekstowe
Funkcja MsgBox jest jedną z najbardziej przydatnych i tym samym najczęściej używanych funkcji języka VBA. Niektóre z jej zastosowań przedstawiam poniżej:
· z jednym przyciskiem 'OK' może służyć do wyświetlania komunikatów lub/i ostrzeżeń dla użytkownika w trakcie pracy aplikacji,
· z odpowiednio dobranym zestawem przycisków może stanowić odpowiednik prostego okna dialogowego (w wielu przypadkach zamiast osobnego formularza można użyć funkcji MsgBox) - okno wyświetla wartość zmiennej lub zapytanie, a odpowiedź użytkownika zwraca do procedury odpowiednią wartość,
· możliwość wyświetlania wartości zmiennej można stosować w trakcie testowania poszczególnych procedur (np. stosowałem ją by dowiedzieć się, które powtórzenie pętli 'For Next' generuje błąd lub która pętla w dość skomplikowanych algorytmie nie działa zgodnie z założeniami. W tym ostatnim przypadku komunikat brzmiał 'Tu jestem';)
Więcej informacji o funkcji MsgBox (np. tworzenie plików pomocy) można znaleźć w bardziej zawansowanej literaturze VBA np. - J. Walkenbach "Excel 2003. Programowanie VBA"- Pr. zbiorowa "Excel 2007. Programowanie VBA"Książki prezentowane są na podstronie niniejszej witryny.
cichonta