CISA FotoGallery

Statistiche

Tot. visite contenuti : 928205
Home Articoli tecnici Moduli Come lavora una funzione

Come lavora una funzione

Scopo di quest'articoletto è spiegare come utilizzare una funzione.

Per il nostro scopo utilizziamo la nota funzione di arrotondamento pubblicata su www.donkarl.com/it.

 

Appare inutile spiegare della necessità di tale funzione, viste le spiegazioni molto chiare dell'autore, quello che interessa invece è capire come e dove usare una funzione e perché questa effettivamente arrotonda in maniera commerciale

Function fctRound(varNr As Variant, Optional varPl As Integer = 2) As Double
 'by Konrad Marfurt + ("" by) Luke Chung + Karl Donaubauer
 'esce se valore non numerico
    If Not IsNumeric(varNr) Then Exit Function
    fctRound = Fix("" & varNr * (10 ^ varPl) + Sgn(varNr) * 0.5) / (10 ^ varPl)
End Function


Fctround è il nome che può essere richiamato nei moduli e nelle query
varNR è una variabile di tipo variant.
Usata in questo modo noi sappiamo che questa funzione accetta un valore
dall'esterno della funzione ed in questo caso è sia il valore da "manipolare"
che quello da restituire manipolato (vedi oltre).

Dunque ipotizziamo di avere il valore di un controllo in una maschera o report o una variabile in un modulo,
o un campo di un recordset che si chiama txtpippo di tipo testo
ed un altro che si chiama dblpluto di tipo numerico a precisione doppia;
chiamiamo la nostra funzione fctround(txtpippo;2)
e fctround(dblpluto;2). Il fatto che sia variant il tipo in ingresso
della funzione accetta qualsiasi tipo di valore, ma se

If Not IsNumeric(varNr) then exit function esce dalla funzione;

Altrimenti,  Fix restituisce un intero troncando i decimali senza arrotondare, es. Fix(10,123) = 10; Fix(10,567) = 10 "" è un espediente per aumentare la precisione & VarNr quindi il nostro valore in entrata 10,123 o 10,567 vengono troncati nella parte decimale *(10^varPI) VarPI è il numero di cifre a cui si vuole arrotondare ^ invece è l'elevazione alla potenza sgn(varnr)*0.5/(10^varPI) a quello aggiungi il valore dello stesso portato a single elevato a potenza quindi il valore iniziale deve assumere quel valore di arrotondamento così manipolato as double  qualsiasi valore che risulta trattalo come double: infatti se non ci fosse questa funzione verrebbe trattato come testo.

Ricapitolando con questa funzione diciamo:
-) Io ti do un valore
-) tu verifica se è un numero
-) se lo è trattalo arrotondando in quel modo
-) e restituiscimi il dato che ti ho introdotto come un valore numerico a precisione doppia.

Come usarlo?
Anzitutto copiando la funzione in un modulo a parte.
Poi la possiamo usare ovunque:
In una query "Select prezzo, quantità, fctround(prezzo*quantità) as Importo from vendita"
In un recordset
with rst
.edit
!Importo = fctround(!prezzo*!quantità)
.update
end with