lepo ti radi i sa decimalama. problem koji imas nisu decimale nego redosled izvrsavanja programskih koraka.
Imas 10 polja u koje se unose vrednosti. stavio si na After Update za svako polje da se radi REPLACE. To znaci samo tada. Ako odes pa promenis jednu vrednost samo, ne diras ostale, dobijes gresku jer se izraz za EVAL ne izracunava dobro. Ovo znaci da bi svih 10 Aftre_Update eventa morali da se izvrse svaki put kad kliknes dugme za obracun. I moras da se pobrines o praznim celijama - ako nemas O9 i X9 program ce da pukne.
Kod na dugmetu treba da izgleda ovako:
Code:
Private Sub Command62_Click()
'Ovo mora da stoji ovde:
On Error Resume Next 'ovo ignorise one koji su NULL
'Treba proveriti za NULL i obrisati ovaj ON Error Resume Next
'ovo je quick and dirty metod
Call X1_AfterUpdate
Call X2_AfterUpdate
Call X3_AfterUpdate
Call X4_AfterUpdate
Call X5_AfterUpdate
Call X6_AfterUpdate
Call X7_AfterUpdate
Call X8_AfterUpdate
Call X9_AfterUpdate
Call X10_AfterUpdate
'sad moze da se radi EVAL
'Pretvoris u Decimal i pokazes do 6 cifara rezultat
'Ako treba vise decimala, promeni "#.######"
Me.Rezultat.Value = Format(CDec(Eval([Izraz])), "#.######")
End Sub
Procitaj komentar i resi se OnError Resume Next linije.
Da se pobrines o NULL vrednostima (prazne celije) tvoje UPADTE procedure treba da izgledaju ovako:
Code:
Private Sub X10_AfterUpdate()
If IsNull([010]) Then Exit Sub 'ako je neki od ulaznih podataka NULL ignorisi ceo red
If IsNull([X10]) Then Exit Sub
Me.Izraz.Value = Replace([Izraz], [O10], [X10])
End Sub
Ja sam ti popravio kod malo, tek da proradi. Ti se pobrini za ostalo.
Medjutim, ima jedan problem. Sta ces kad bude vise od 10 parametara? Ovo bi moglo lepo da se normalizuje, pa da na formi imas subformu umesto 50 text boxova. I ceo proracun bi bio na jednom mestu, a ne na 10 mesta.