Problém jsi specifikoval naprosto přesně já jsem zaslal krátkou odpověď. Chceš, aby funkce v 6. řádku fungovala stejně jako ve 3. řádku. Tvoje funkce v 6. řádku se
vůbec neprovádí máš vstupní hodnoty deklarovany jako double a ony double (s mezerou) nejsou tz. VBA to před započetím funkce oznámí jako chybu a musel bys to testovat stejně jako v 3. řádku na chybu tz.
(=KDYŽ(JE.CHYBHODN(odecti_hodnoty(A7;B7));0;odecti_hodnoty(A7;B7)))
Aby začla funce odecti_hodnoty pracovat musíš 1. vymazat hodnoty na test na double, tz. dát je např. variant, string apod.
A dále co jsem v předchozí odpovědi neřešil je použití IsError to je u numerických hodnot velmi pofiderní a v literatuře se moc nepoužívá, lepší je použití Err.
V tvém případě program zhavaruje za běhu, neboť nelze odečíst dvě nečísla výsledkem není žádná hodnota proměnné ( narozdíl od buňky tam je zápis chyby podle druhů chyby), ale buňka není proměnná, i když to tak vypadá.
Buď ošetřuješ výsledek nebo proměnné
Public Function odecti_hodnoty(od1, do1) As Double
Dim chyba As Variant
'v lokální zjistím výsledek funkce, abych ji testoval
'Co se ti více líbí
Err = 0
On Error Resume Next
chyba = do1 - od1
If Err = 0 Then
'nebo
'If IsNumeric(do1) And IsNumeric(od1) Then
odecti_hodnoty = do1 - od1
Else
odecti_hodnoty = 0
End If
citovat