Procedure e Funzioni
Info
Esempi
Linguaggio
Librerie
Formule
Ultimi Inseriti

 Login

 Password

Sia le procedure che le funzioni sono degli insieme di istruzioni che eseguono uno specifico compito, la differenza principale è che le funzioni restituiscono un valore e possono essere utilizzate anche nel foglio di calcolo, le procedure non restituiscono valori ma possono modificare variabili ed oggetti.

Funzioni
Un esempio semplice di funzione è quello qui sotto, il calcolo dell'area di un quadrato.
Function AreaQuadrato(Lato as Double) as Double
  AreaQuadrato = Lato * Lato
End Function
Una volta creata, la funzione, è utilizzabile nel foglio di calcolo: la possiamo trovare fra le funzioni definita dall'utente nella finestra di inserimento di una funzione (a destra) oppure sia semplicemente scrivendo = e poi il nome della funzione. Naturalmente nel foglio di calcolo possiamo indicare al posto del parametro una cella.
E' anche disponibile nel codice VBA utilizzandola come in questo esempio:
Area = AreaQuadrato(10)
Anche le funzioni create in VBA, come le altre predefinite, non possono modificare il formato delle celle.

Procedure
A differenza delle funzioni le procedure possono eseguire altre operazioni come modificare il formato delle celle, eseguire operazioni sui file, aprire finestre, inserire commenti ecc.
La procedura qui sotto crea una finestra per indicare il risultato di un'operazione.
Sub MsgAreaQuadrato()
  Lato = 10
  Area = Lato * Lato
  MsgBox "Area: " & Area & ", Lato: " & Lato
End Sub
Per richiamare l'elenco delle procedure disponibili dal foglio possono essere utilizzati i tasti Alt-F8.

Differenze fra procedure e funzioni
Provando a riassumere le differenze fra funzioni e sub:
FunctionSub
Restituisce un valoreNon restituisce un valore ma può modificare il valore dei parametri
Possono essere, come le formule predefinite, in un foglio di calcoloNon possono essere utilizzate direttamente in un foglio di calcolo
Possono restituire solo valoriPossono modificare il formato delle celle, aggiungere commenti, eseguire operazioni sui file...
Non possono essere richiamate direttamentePossono essere richiamate (se senza parametri) dall'utente o associate a controlli.

Parametri opzionali
Un’utile caratteristica è quella che permette di specificare un parametro di una funzione o procedura come facoltativo: può essere specificato o meno nella chiamata; può essere specificato anche un valore di default. La sintassi è questa:
Optional Sconto As Double = 0
Un esempio di una funzione con parametri opzionali è quello qui sotto può essere utilizzata con un solo sconto o con entrambi
Function Sconto(Valore As Double, PercSconto1 As Double, Optional PercSconto2 As Double = 0) As Double
  Sconto = Valore * (1 - PercSconto1 / 100) * (1 - PercSconto2 / 100)
End Function

Meccanismo del passaggio dei parametri
Argomento difficile per i non programmatori ma da tenere in considerazione: quando si passano uno o più argomenti a una procedura o funzione é possibile passare il valore di questo elemento sottostante o un riferimento ad esso: in dettaglio sono spiegati sotto.

Passaggio per valore (ByVal)
Passare un argomento per valore, specificando prima del nome del parametro ByVal, fa si che VB crei una copia del valore del parametro in una variabile locale della procedura o funzione: non ha quindi accesso all'elemento del codice chiamante.

Passaggio per riferimento (ByRef)
Per passare un parametro per riferimento si specifica ByRef prima del parametro, in questo caso la procedura o funzione ha accesso direttamente alla variabile e ne può modificare il contenuto.
Bisogna notare che nel caso di oggetti o di puntatori di fatto è questa è l'unica opzione possibile in quanto la variabile contiene solo un riferimento alla posizione dei dati non i dati stessi.
Se non viene specificato ByVal o ByRef è quest'ultima l'opzione di default.

Differenza fra ByVal e ByRef
Tipo di parametroPassato ByVal Passato ByRef
Dato sempliceLa procedura non può modificare il parametro. La procedura può modificare il parametro.
Oggetto o puntatoreLa procedura non può modificare la variabile, ma può modificare i membri dell'istanza a cui punta.La procedura può modificare la variabile e i membri dell'istanza a cui punta.

Parametri in numero indefinito
E' possibile passare ad una funzione anche un numero di parametri non definito come accade per la funzione SommaPiuSe. Un esempio con il il problema del calcolo degli sconti è quello qui sotto: vengono passati come parametri il valore lordo e un numero variabile di sconti.
Function Sconto(ByVal Valore As Range, ParamArray Sconti () As Variant) As Double
  R = Valore
  For i = LBound(Sconti) To UBound(Sconti)
    R = R * (1 - Sconti(i) / 100)
  Next i
  Sconto = R
End Function
 

data4idea srls - PIva 01881000937 - info@data4idea.it