Valutazione 4.87/ 5 (100.00%) 5838 voti

Condividi:        

[EXCEL 2010] Aritmetica con decimali nei FORM

Vuoi potenziare i tuoi documenti Word? Non sai come si fa una macro in Excel? Devi creare una presentazione in PowerPoint?
Oppure sei passato a OpenOffice e non sei sicuro di come lavorare al meglio?

Moderatori: Anthony47, Flash30005

[EXCEL 2010] Aritmetica con decimali nei FORM

Postdi pl1957 » 09/10/13 22:51

Arieccomi! Un saluto a tutti.

Stavolta il problema è quello di eseguire operazioni matematiche tra i vari campi di un form.

In pratica: inserisco una serie di valori in una serie di campi e mano a mano che inserisco devo visualizzare la loro somma in un altro campo del medesimo form (uso AfterUpdate).

Va tutto bene se i campi contengono valori interi, ma quando inserisco un decimale il calcolo sballa (nel senso che i decimali non vengono presi in considerazione).
Ho provato sia con il punto che con la virgola. Stesso risultato.
Ho provato a copiare il valore dei campi in variabili numeriche (con cLng) e fare l'operazione da lì, ma niente: dei decimali non vuole sentirne parlare...

Ho anche inserito dei msgbox per visualizzare i dati. Il display del valore inserito è coi decimali, quello derivante dalla conversione cLng è senza.

Un grazie anticipato.
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Sponsor
 

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi Anthony47 » 09/10/13 23:19

Bentornato...
Se usi CLng non ti deve meravigliare che i decimali finiscono in cavalleria, visto che CLng restituisce un tipo "Long", che e' un intero.
Userai invece CDbl, ad esempio
Codice: Seleziona tutto
UserForm1.TextBox3.Value = CDbl(Replace(TextBox1.Value, ".", ",")) * CDbl(Replace(TextBox2.Value, ".", ","))

Ho usato Replace per sostituire un eventuale "punto" con la "virgola", in modo che si possa scrivere sia 3.14 che 3,14.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi pl1957 » 10/10/13 06:12

Sempre veloce, preciso (e notturno), Anthony!

E io che avevo cambiato la definizione da DOUBLE a LONG per risparmiare memoria... :roll: :roll: :roll:

Però al Replace avevo già pensato da solo... :lol:

Grazie.
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi Anthony47 » 10/10/13 12:10

In effetti 4 byte di memoria sono un bel risparmio... :D
1-Non hai bisogno di passare da una variabile, puoi farlo direttamente da /verso i textbox (come l' esempio che ti ho dato)
2-Se vuoi risaprmiare 4 byte e mantenere i decimali puoi usare il tipo Single, con la conversione CSng.

Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi pl1957 » 10/10/13 18:32

Eh, no! Non vale! Devi rispondere solo dopo la mezzanotte!!! :D

In realtà le operazioni da fare sono molte e complesse. Qui le ho sintetizzate.

Approfitto ancora.

Piuttosto che fare
Codice: Seleziona tutto
If Textbox1.Value = vbNullString Then
dblCampo1 = 0
Else
dblCampo1 = CDbl(Textbox1.Value)
End If

avevo impostato il più snello
Codice: Seleziona tutto
dblCampo1 = Iif(Textbox1.Value = vbNullString, 0, CDbl(Textbox1.Value))

ma ottengo un errore di tipo dati non valido.

Sarà mica che la funzione Iif() si "espande" (non è il termine corretto, ma al momento non me ne sovviene uno più consono) prima di valutare la condizione e quindi tenta comunque una conversione con CDbl() di una stringa nulla?
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi Anthony47 » 10/10/13 23:35

Immagino che ti dia "Tipo non corrispondente" quando lasci textbox1 vuoto... se e' cosi' allora ti aiutera' l' help on line, quando dice
L' ingiustamente trascurato help on line del vba, alla voce Funzione IIf ha scritto:Sintassi
IIf(expr, truepart, falsepart)

Osservazioni
IIf valuta sempre sia truepart che falsepart, anche se restituisce uno solo dei due valori. Per tale ragione, è opportuno prevedere la possibilità di effetti indesiderati. Se, ad esempio, la valutazione di falsepart restituisce un errore di divisione per zero, verrà generato un errore anche se expr è True.

Orbene, CDbl("") restituira' errore quando il combobox e' vuoto... quindi forse e' meglio usare la struttura If /Then /Else, oppure ti rifugi in
Codice: Seleziona tutto
    dblCampo1 = IIf(TextBox1.Value = vbNullString, 0, CDbl("0" & TextBox1))


Ciao
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi pl1957 » 11/10/13 06:06

Ci hai azzeccato!
Seguirò il tuo consiglio aggiungendo lo "0".
E seguirò anche l'altro tuo suggerimento sul Single al posto del Double.

Per quanto riguarda l'help on line, sinceramente, non l'avevo consultato.
Non per pigrizia: per sfiducia. Gli help della MS tutto sono tranne che degli help. Questa voce è una delle rare eccezioni.
Avevo googlato un po', ma senza esito. Poi, giacché stavamo parlandone...

Grazie ancora. Passo e chiudo!
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi pl1957 » 11/10/13 06:53

Anthony47 ha scritto:
Codice: Seleziona tutto
dblCampo1 = IIf(TextBox1.Value = vbNullString, 0, CDbl("0" & TextBox1))


E se facessi una cosa del genere:
Codice: Seleziona tutto
dblCampo1 = CDbl("0" & TextBox1)


Visto che, in ogni caso, avrei un risultato = 0 per textbox vuota, tanto vale accelerare l'esecuzione (non varrebbe la pena per una sola, ma per oltre 50 textbox direi di sì)
Avatar utente
pl1957
Utente Junior
 
Post: 29
Iscritto il: 29/09/12 08:14
Località: Marche

Re: [EXCEL 2010] Aritmetica con decimali nei FORM

Postdi Anthony47 » 11/10/13 09:50

E se facessi una cosa del genere:

Codice: Seleziona tutto
    dblCampo1 = CDbl("0" & TextBox1)


Io mi ero fermato alla logica dell' istruzione Iif, ma la tua idea guarda la logica complessiva: ottimo...

Alla prossima
Anthony
Win7 + Office 2010 Ita; Win 7 + Office 2013 Ita
Xp + Office 2003 Ita
E voi cosa usate? (per istruzioni vedere viewtopic.php?f=26&t=97449)
Avatar utente
Anthony47
Moderatore
 
Post: 13899
Iscritto il: 21/03/06 16:03
Località: Ivrea


Torna a Applicazioni Office Windows


Topic correlati a "[EXCEL 2010] Aritmetica con decimali nei FORM":


Chi c’è in linea

Visitano il forum: Nessuno e 12 ospiti