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.
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:
Function | Sub |
---|
Restituisce un valore | Non restituisce un valore ma può modificare il valore dei parametri |
Possono essere, come le formule predefinite, in un foglio di calcolo | Non possono essere utilizzate direttamente in un foglio di calcolo |
Possono restituire solo valori | Possono modificare il formato delle celle, aggiungere commenti, eseguire operazioni sui file... |
Non possono essere richiamate direttamente | Possono 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:
Un esempio di una funzione con parametri opzionali è quello qui sotto può essere utilizzata con un solo sconto o con entrambi
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 parametro | Passato ByVal | Passato ByRef |
---|
Dato semplice | La procedura non può modificare il parametro. | La procedura può modificare il parametro. |
Oggetto o puntatore | La 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.