Wpis z mikrobloga

Nie wiem czy pisanie w #vba podchodzi pod #programowanie, ale mam nadzieję, że mnie nie zabijecie.

Okienko formularza zabezpieczone IsNumeric (sprawdza czy liczba) i podobnym, chcę by po wpisaniu błędnej wartości kursor wracał na błędne pole, by można było poprawić wpis. Mam parę pomysłów ale żaden elegancki:

1. Ustawić w zdarzeniu AfterUpdate (po aktualizacji) przy błędzie TabStop na False (brak reakcji na tabulator) dla wszystkich pozostałych pól i powrót po poprawnej edycji - wady: od uja pisania.

2. Ustawić okienko błędu UserForm, które pod przyciskiem OK będzie miało błędne_pole.SetFocus (podświetla pole) - wady: uniemożliwia skorzystanie z MsgBox (gotowego okienka błędu), tj. od uja pisania*.

Jakieś pomysły? Brak mi doświadczenia, a to popularna opcja i pewnie nie jeden ma gotowca.

Fajnie by było dodać do MsgBox dodatkową zadanie po wybraniu OK* lub znaleźć miejsce, gdzie wklepać .SetFocus (wrzucenie tego (if pole.value = 'błędne' Then pole.SetFocus) w BeforeUpdate itp. do kolejnego pola nie działa/nie zdaje egzaminu).

*Choć też nie wiem czy to zadziała, jeżeli w domyśle to okienko już jest zaznaczone, tylko zakryte kolejnym UserForm.
  • 3
@przemilcze: oba wyjścia podane przeze mnie nie działają - program kończy wykonywanie zadania i leci dalej wg własnych założeń - tj.:
- w 1. przypadku mimo zatrzymania tabulatora z braku laku leci do następnej komórki, dopiero przy drugim okrążeniu już widzi tylko pole z błędem;
- w 2. przypadku jw., działa do momentu zamknięcia okna (podświetla w tle, ale po zakończeniu idzie dalej).

Pomysły?
Lipa, wyświetla msg 2 razy, zapewne wyzwala funkcję dwukrotnie, ale z jakiej racji? Wpisuję błędną nazwę, klikam enter - tutaj rusza funkcja i zaraz robi to ponownie, dlaczego?

Private Sub pmiesiącodBeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)

Dim miesiąc As Date
Dim i As Byte
Dim msg As Byte

i = 1
For miesiąc = i To 12
If p
miesiącod = MonthName(miesiąc) Then
Exit Sub
Else
i = i +