Excel - MsgBox i makra

Jakiś 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:

msgboxexcel1.png

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

msgBox info

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

onlyregistered1.png

Przydała Ci się ta informacja? Subskrybuj mój kanał RSS, by być na bieżąco z nowymi wiadomościami.