Come restituire un risultato da una funzione VBA

Come posso restituire un risultato da una funzione?

Per esempio:

Public Function test() As Integer return 1 End Function 

Questo dà un errore di compilazione.

Come posso fare in modo che questa funzione restituisca un intero?

Per i tipi di restituzione senza object, devi assegnare il valore al nome della tua funzione, in questo modo:

 Public Function test() As Integer test = 1 End Function 

Esempio di utilizzo:

 Dim i As Integer i = test() 

Se la funzione restituisce un tipo di object, devi utilizzare la parola chiave Set come segue:

 Public Function testRange() As Range Set testRange = Range("A1") End Function 

Esempio di utilizzo:

 Dim r As Range Set r = testRange() 

Si noti che l’assegnazione di un valore di ritorno al nome della funzione non termina l’esecuzione della propria funzione. Se vuoi uscire dalla funzione, devi dire esplicitamente Exit Function . Per esempio:

 Function test(ByVal justReturnOne As Boolean) As Integer If justReturnOne Then test = 1 Exit Function End If 'more code... test = 2 End Function 

Documentazione: http://msdn.microsoft.com/en-us/library/office/gg264233%28v=office.14%29.aspx

Le funzioni VBA trattano il nome della funzione stesso come una sorta di variabile. Quindi, invece di usare una dichiarazione di ” return “, dovresti solo dire:

 test = 1 

Si noti, tuttavia, che ciò non si interrompe. Anche qualsiasi codice dopo questa dichiarazione verrà eseguito. Pertanto, è ansible avere molte istruzioni di assegnazione che assegnano valori diversi da test e qualunque sia il valore quando si raggiunge la fine della funzione sarà restituito il valore.

L’impostazione del valore restituito al nome della funzione non è ancora esattamente uguale all’istruzione return Java (o di altro tipo), perché in java, return la funzione, in questo modo:

 public int test(int x) { if (x == 1) { return 1; // exits immediately } // still here? return 0 as default. return 0; } 

In VB, l’equivalente esatto richiede due righe se non si imposta il valore restituito alla fine della funzione . Quindi, in VB il corollario esatto sarebbe simile a questo:

 Public Function test(ByVal x As Integer) As Integer If x = 1 Then test = 1 ' does not exit immediately. You must manually terminate... Exit Function ' to exit End If ' Still here? return 0 as default. test = 0 ' no need for an Exit Function because we're about to exit anyway. End Function 

Dato che questo è il caso, è anche bello sapere che è ansible utilizzare la variabile di ritorno come qualsiasi altra variabile nel metodo. Come questo:

 Public Function test(ByVal x As Integer) As Integer test = x ' <-- set the return value If test <> 1 Then ' Test the currently set return value test = 0 ' Reset the return value to a *new* value End If End Function 

Oppure, l’ esempio estremo di come funziona la variabile return (ma non necessariamente un buon esempio di come dovresti effettivamente codificare): quello che ti manterrà sveglio la notte:

 Public Function test(ByVal x As Integer) As Integer test = x ' <-- set the return value If test > 0 Then ' RECURSIVE CALL...WITH THE RETURN VALUE AS AN ARGUMENT, ' AND THE RESULT RESETTING THE RETURN VALUE. test = test(test - 1) End If End Function 

Il codice seguente memorizza il valore restituito nella variabile retVal e quindi MsgBox può essere utilizzato per visualizzare il valore:

 Dim retVal As Integer retVal = test() Msgbox retVal