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ła | Wartość | Zwracany błąd |
xlErrDiv0 | 2007 | #DZIEL/0! |
xlErrNA | 2042 | #N/D! |
xlErrName | 2029 | #NAZWA? |
xlErrNull | 2000 | #ZERO! |
xlErrNum | 2036 | #LICZBA! |
xlErrRef | 2023 | #ADR! |
xlErrValue | 2015 | #ARG! |
xlErrBlocked | 2047 | #ZABLOKOWANE! |
xlErrCalc | 2050 | #OBL! |
xlErrCalc | 2046 | #POŁĄCZ! |
XlErrField | 2049 | #POLE! |
xlErrGettingData | 2043 | #POBIERANIE_DANYCH |
xlErrSpill | 2045 | #ROZLANIE! |
xlErrUnknown | 2048 | #NIEZNANE! |