Odpowiadając na pytanie: jestem Krystian i przynoszę wiedzę. Dotyczy ona tematu, o który jestem często pytany w przypadku VBA. Podczas tworzenia makr łatwo natrafić na coś, co jest niezgodne z oczekiwaniem. Najprostszym przykładem jest komórka, w której jest tekst, a oczekiwaliśmy liczby. Uniknąć takich przypadków się nie da, ale możemy się przed nimi zabezpieczyć.
Najprostszym sposobem są funkcje informacyjne. Sprawdzają one, czy zadana wartość jest tym, czego oczekujemy i zwraca odpowiednio prawdę albo fałsz. Wystarczy ich użyć w warunku if:
If funkcja_informacyjna(wartosc) Then 'jeśli ok Else MsgBox("Wartość " & wartosc & " jest niepoprawna. Proszę, popraw ją") End If
Jakie mamy zatem funkcje informacyjne?
Oto kilka najbardziej przydatnych:
- IsDate – zwraca wartość logiczną (true/false) wskazującą, czy wartość może być zamieniona na typ Date. Jeśli wartość wskazanej zmiennej jest datą, wtedy jako wynik zwróci True.
- IsEmpty – jeśli zmienna nie została jeszcze zainicjowana lub zmienna ma wartość Empty, wtedy otrzymamy True.
- IsNull – określa, czy w zmiennej przechowywane są jakiekolwiek dane. Jest to inna funkcja niż IsEmpty, ponieważ ta druga sprawdza, czy zmienna została zainicjowana, a ta pierwsza, czy posiada wartość.
- IsNumeric – za jej pomocą jesteśmy w stanie sprawdzić, czy jesteśmy w stanie zmienić wartość zmiennej na liczbę.
Jak tego użyć?
Jak napisałem wyżej: wystarczy wykorzystać instrukcję if. Dla przykładu chcielibyśmy zrobić sumowanie dwóch liczb i wstawianie ich do komórki obok:
Sub SumaDwochLiczb() If IsNumeric(Range("A1") Then If IsNumeric(Range("B1") Then Range("C1") = Range("A1") + Range("B1") Else MsgBox("Wartość w komórce B1 jest niepoprawna") End If Else MsgBox("Wartość w komórce A1 jest niepoprawna") End If End Sub
Można również odwoływać się do pól tekstowych w formularzach użytkownika. Spróbujmy zwiększyć wartość w polu tekstowym o 1:
Private Sub Commandbutton1_Click() If IsNumeric(TextBox1.Text) Then TextBox1.Text = TextBox1.Text + 1 Else MsgBox("Wprowadzona wartość nie jest liczbą") End If End Sub
Bardzo ważne jest to, aby poinformować użytkownika o tym, że wartość jest niepoprawna. Najlepiej, jeśli wskażemy która, aby nie musiał szukać. W końcu tworzymy makra właśnie dla użytkownika. Nawet jeśli tworzymy je dla siebie, to korzystając z tego za miesiąc, nie będziemy pamiętali, która wartość jest niepoprawna i trzeba będzie kukać do kodu.
Liczę, że od teraz w Waszych skryptach w VBA będziecie pamiętać o tym, że trzeba się zabezpieczyć i będą one dużo bezpieczniejsze niż były do tej pory. Jeśli macie jakąś sugestię odnośnie do tego, co miałoby się pojawić na blogu, nurtuje Was jakieś pytanie, lub często trafianie na niedogodność, to piszcie w komentarzach/formularzu kontaktowym. Bardzo chętnie odniosę się do tego i opiszę rozwiązanie na blogu.
Najnowsze komentarze