Zwracanie błędów przez funkcje zdefiniowane przez użytkownika (UDF)

przez | 2024-11-06

Oto prosta funkcja, która dla masy ciała i wzrostu zwraca wartość wskaźnika BMI (Body Mass Index).

Public Function BMI(Masa As Single, Wzrost As Single) As Variant
        BMI = Masa / Wzrost ^ 2
End Function

Pojawia się pytanie – a co by było, gdyby użytkownik jako Wzrost podał wartość 0? Wystąpi błąd, gdyż w matematyce dzielenie przez 0 jest zabronione. Oprócz tego mamy inną sytuację – otóż chcąc obliczyć BMI podajemy masę ciała i wzrost a jak wiemy, te wartości raczej powinny być dodatnie.

Moglibyśmy nieco zmienić nasz kod:

Public Function BMI(Masa As Single, Wzrost As Single) As Variant
    If Wzrost <= 0 Or Masa <= 0 Then
        BMI = "!!! Wzrost i masa muszą być dodatnie !!!"
    Else
        BMI = Masa / Wzrost ^ 2
    End If
End Function

To rozwiązanie jest już lepsze, gdyż po podaniu nieprawidłowych wartości w komórce arkusza pojawi się tekst: !!! Wzrost i masa muszą być dodatnie !!!

Ale istnieje lepsze rozwiązanie: nasza funkcja może zwrócić Excelowy błąd #LICZBA!

Public Function BMI(Masa As Single, Wzrost As Single) As Variant

    If Wzrost <= 0 Or Masa <= 0 Then
        'Zwróć błąd - zarówno wzrost jak i masa muszą być liczbami dodatnimi
        BMI = CVErr(xlErrNum)
    Else
        BMI = Masa / Wzrost ^ 2
    End If

End Function

W celu zwrócenia błędu użyliśmy funkcji CVErr z odpowiednią stałą (numerem błędu). Zwróć uwagę, że funkcja BMI zwraca wartość typu Variant (a nie np. Single) gdyż błędy zwracane przez funkcję CVErr nie są liczbami.

Funkcja CVErr może przyjmować następujące argumenty:

StałaWartośćZwracany błąd
xlErrDiv0  2007   #DZIEL/0!
xlErrNA2042   #N/D!
xlErrName  2029   #NAZWA?
xlErrNull  2000   #ZERO!
xlErrNum   2036   #LICZBA!
xlErrRef   2023   #ADR!
xlErrValue 2015   #ARG!
xlErrBlocked2047#ZABLOKOWANE!
xlErrCalc2050#OBL!
xlErrCalc2046#POŁĄCZ!
XlErrField2049#POLE!
xlErrGettingData2043#POBIERANIE_DANYCH
xlErrSpill2045#ROZLANIE!
xlErrUnknown2048#NIEZNANE!

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *

Witryna wykorzystuje Akismet, aby ograniczyć spam. Dowiedz się więcej jak przetwarzane są dane komentarzy.