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.

Dołącz do newslettera już dziś!
Zero spamu - tylko wartościowe treści!
Musisz już lecieć?
Zostaw swój adres e-mail i dołącz do BEZPŁATNYCH WEBINARÓW dotyczących SQLa!
  • „Jak uczyć się SQLa?” – 4 października
  • „SQL dla testerów” – 12 października