Opis problemu
Podczas normalnej pracy z naszym programem, zdarza się, że użytkownik przez przypadek kliknie nie ten “x” co trzeba, szczególnie jeśli działa na zmaksymalizowanych oknach i przez przypadek wyjdzie z programu. Oczywiście to tylko jedna z możliwości, ale jedno co trzeba przyznać to to, że warto zapytać usera czy rzeczywiście kończy pracę.
Nie ma na to jednego sposobu, Access nie udostępnia zdarzenia przy zamknięciu aplikacji. Ja proponuje wykorzystać wiedzę o środowisku do rozwiązania tego problemu. Kluczem do sukcesu jest zrozumienie, że w momencie zamknięcia MsAccess będzie zamykał wszystkie otwarte formularze. Podczas zamknięcia formularza wywoływane jest zdarzenie Form_Unload, które moze być anluwane z poziomu VBA poprzez zmiane zmiennej Cancel na 1.
Rozwiązanie
Stwórzmy formularz o nazwie AppExit, który w zdarzeniu Form_Unload będzie pytał użytkownika, czy chce wyjść z programu, jeśli odpowiedź będzie negatywna, wtedy zdarzenie zostanie anulowane. Kod VBA będzie przedstawiał się następująco:
Private Sub Form_Unload(Cancel As Integer) If MsgBox("Czy chcesz wyjść z programu?", vbYesNo + vbQuestion + vbDefaultButton2, "") = vbNo Then 'Skoro nie chce wyjść z programu to anulujmy zdarzenie unload Cancel = 1 Else 'miejsce na kod niezbedny do wykonania podczas zamkniecia End If End Sub
Teraz pozostaje nam odpalić ten formularz przy starcie programu. Oczywiście nie chcemy też, aby użytkownik go widział podczas normalnej pracy, bo tylko by mu przeszkadzał. Otwarcie formularza podczas uruchomienia można zrealizować na przykład poprzez stworzenie makra AutoExec:
Tu wykorzystujemy kolejną właściwość MsAccess, mianowicie podczas uruchomienia pliku bazy, access sprawdza czy nie ma makra o nazwie AutoExec, jeśli jest, to je uruchamia.
Efekt: teraz przy próbie wyjścia poprzez przycisk “x”, użytkownik zostanie zapytany o celowość swoich działań.
Plik z realizacją dostępny pod tym linkiem
0 Comments.