< návrat zpět

MS Excel


Téma: VBA_FCE_chzbnhodn rss

Zaslal/a 9.4.2011 14:20

Dobrý den.
V Excelu mi funkce je.chybnhodn správně podle funkce KDYŽ vyhodnotí rozdíl buněk při zadání mezer mezerníkem do číselných buněk. Ve vlastní funkci VBA se minedaří chybu ošetřit. Velice děkuji za pomoc Krist

Příloha: zip4576_fc_naj_chybn.zip (9kB, staženo 27x)
Zaslat odpověď >

#004578
avatar
Ve funkci máš vstupní hodotu označenou jako Double, VBA vyhodnotí, že hodnota pole z mezerou není Double a označí ji jako chybu hodnoty.citovat
#004623
avatar
Díky, asi jsem špatně specifikoval problém.Na řádku 3 mám vzorec Excelu : Když je chybná hodnota (protože buňky jsou číslo a dám tam mezeru), dej do výsledku nulu, jinak rozdíl buněk. (=KDYŽ(JE.CHYBHODN(B3-A3);0;B3-A3))A to funguje.
Ve funkci (na řádku 6 žlutém) chci to samé. Protože hodnota je double a dám mezeru, je to chyba
(If Not IsError(chyba) Then
odecti_hodnoty = do1 - od1
Else
odecti_hodnoty = 0 End If).
A potíž mám v tom, že i když je ve funkci větev else (pokud je chyba), nedosáhnu výsledku nula.Díkycitovat
#004628
avatar
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
#004641
avatar
Veliké díky. Už mi to funguje. Skláním se před Tebou velký Vezíre 7 7 . Ještě jednou dík.citovat

Uživatelské menu

Nejste přihlášen(a)
avatar\n

Menu

Formulář Faktura

Formulář Faktura IV

Oblíbený formulář Faktura byl vylepšen a rozšířen.
Více se dočtete zde.

Helios iNuvio

Používáte podnikový systém Helios iNuvio? Potřebujete pomoci se správou nebo vyvinout SQL proceduru? Více informací naleznete na stránce Helios iNuvio.

On-line nástroje