Excel - msgbox i makra
Tuesday, May 26th, 2009Jakiś czas temu pisałem o tworzeniu makr i przycisków uruchamiających makra. Takie przypadki zakładały że nic złego nie może się stać i po prostu realizowały zadanie.
Może się zdarzyć - nawet często - że chcąc wykonać makro kasujemy jakieś dane zastępując je innymi. Taka sytuacja nie jest niczym szczególnym, ale jeśli użytkownik nie zdaje sobie sprawy że jego dane przepadną na skutek działania makra to może nam to przysporzyć problemów. Poinformowanie go o konsekwencjach uruchomienia i pozostawienie mu wyboru to pierwsze z zastosowań okienek msgbox
Drugim zastosowaniem msgbox jest poinformowanie użytkownika o tym że działanie makra zakończyło się powodzeniem (lub niepowodzeniem) i co trzeba robić dalej.
Okna msgbox mogą być wywoływane jako funkcja, która zwraca wartość do zmiennej (wówczas stosujemy nawiasy) lub po prostu jako funkcja z parametrami, która wyświetla okno i nic więcej się nie dzieje (wówczas nie stosujemy nawiasów dla parametrów).
Ogólna postać funkcji przedstawia się następująco:
Opiszę na początek prostszy przypadek (z drugiego zastosowania msgbox)
Makro informuje o tym co zrobiło i co teraz powinien zrobić korzystający z makra.
informacje w cudzysłowach mogą być zastąpione zmiennymi typu string które zmieniają wartość w zależności od przebiegu makra.
MsgBox “Sformatowałem obszar od A1 do F12. Kliknij Ok aby kontynuować”, vbInformation, “uwaga”
Taki tekst umieściłem w kodzie makra na samym końcu tuż przed słowami kluczowymi End Sub
Efektem wpisania kodu msgbox jest pojawienie się poniższego okienka po zakończeniu działania makra
Wyboru rodzaju okna dokonuje się przez wybranie odpowiedniego atrybutu w parametrze Buttons funkcji msgbox.
Teraz trudniejszy przypadek.
W poniższym przykładzie wykorzystujemy zmienną która od funkcji msgbox “przejmie” wynik “PRAWDA”(true) lub “FAŁSZ”(false) co odpowiada przyciskom OK i Cancel w poniższym przypadku.
Tworzymy zmienną potwierdzenie
Dim potwierdzenie
Teraz zmienna przejmuje Odpowiedź użytkownika z funkcji msgbox.
potwierdzenie = MsgBox(”Grozi skasowaniem danych. Czy kontynuować ?”, vbOKCancel, “Uwaga”)
Wyrażenie If potwierdzenie then jest równoważne If potwierdzenie=True then więc sobie skróciłem
Warunek if powinien obejmować w tej sytuacji całą oryginalną treść makra (czyli tą zarejestrowaną względnie zmodyfikowaną ręcznie bez funkcji msgbox)
If potwierdzenie Then
….realizuje zawartość Makra…
Range(”D4:D17″).Select
Selection.Copy
Application.CutCopyMode = False
ActiveCell.FormulaR1C1 = “v”
Range(”D4:D17″).Select
Range(”D5″).Activate
End If
Jeżeli ktoś kliknie cancel makro nie wykona się a w każdym razie część makra objęta warunkiem if
Wstawianie okien msgbox daje spore pole do popisu. Główne zadania jakie widzę dla tej funkcji to lepsza informacja, nawigacja i ostrzeżenia. Statyczne napisy ostrzegawcze nie dają takiej pewności skupienia uwagi użytkownika jak msgbox. Jeśli jest rozważnie stosowane może zwiększać poczucie bezpieczeństwa i zaufanie do twórcy makra.
W przykładach wykorzystałem jedynie wąski wycinek możliwości tej funkcji
Więcej na temat funkcji msgbox można przeczytać na stronie http://dzono4.webpark.pl/basic/opisvb/msgbox.htm
