Funzione VBA - Chiamata, valore restituito e parametri

Questo tutorial ti insegnerà a creare e utilizzare funzioni con e senza parametri in VBA

VBA contiene una grande quantità di funzioni integrate che puoi utilizzare, ma puoi anche scriverne di tue. Quando si scrive codice in VBA, è possibile scriverlo in una procedura secondaria o in una procedura di funzione. Una Function Procedure è in grado di restituire un valore al tuo codice. Questo è estremamente utile se vuoi che VBA esegua un'attività per restituire un risultato. Le funzioni VBA possono anche essere chiamate dall'interno di Excel, proprio come le funzioni Excel integrate di Excel.

Creazione di una funzione senza argomenti

Per creare una funzione è necessario definire la funzione assegnandole un nome. La funzione può quindi essere definita come un tipo di dati che indica il tipo di dati che si desidera che la funzione restituisca.

Potresti voler creare una funzione che restituisca un valore statico ogni volta che viene chiamata, un po' come una costante.

123 Funzione GetValue() As IntegerOttieniValore = 50Fine funzione

Se dovessi eseguire la funzione, la funzione restituirebbe sempre il valore di 50.

Puoi anche creare funzioni che fanno riferimento a oggetti in VBA ma devi usare la parola chiave Imposta per restituire il valore dalla funzione.

123 Funzione GetRange() come RangeImposta GetRange = Range("A1:G4")Fine funzione

Se dovessi utilizzare la funzione sopra nel tuo codice VBA, la funzione restituirebbe sempre l'intervallo di celle da A1 a G4 in qualsiasi foglio in cui stai lavorando.

Chiamare una funzione da una sottoprocedura

Dopo aver creato una funzione, è possibile chiamarla da qualsiasi altra parte del codice utilizzando una procedura secondaria per chiamare la funzione.

Il valore di 50 verrebbe sempre restituito.

È inoltre possibile chiamare la funzione GetRange da una procedura secondaria.

Nell'esempio sopra, la funzione GetRange viene chiamata dalla procedura Sub per mettere in grassetto le celle nell'oggetto intervallo.

Creazione di funzioni

Argomento singolo

Puoi anche assegnare uno o più parametri alla tua funzione. Questi parametri possono essere indicati come argomenti.

123 Funzione ConvertKilosToPounds (dblKilo as Double) as DoubleConvertiKiloToPounds = dblKilo*2.2Fine funzione

Possiamo quindi chiamare la funzione di cui sopra da una procedura secondaria per calcolare quante libbre sono una quantità specifica di chili.

Una funzione può essere chiamata da più procedure all'interno del codice VBA, se necessario. Questo è molto utile in quanto ti impedisce di dover scrivere lo stesso codice più e più volte. Consente inoltre di suddividere lunghe procedure in piccole funzioni gestibili.

Nell'esempio sopra, abbiamo 2 procedure: ognuna usa la funzione per calcolare il valore in libbre dei chili passati loro nel dblKilo Argomento della funzione.

Argomenti multipli

È possibile creare una funzione con più argomenti e passare i valori alla funzione tramite una procedura secondaria.

123 Funzione CalculateDayDiff(Date1 as Date, Date2 as Date) as DoubleCalculateDayDiff = Date2-Date1Fine funzione

Possiamo quindi chiamare la funzione per calcolare la quantità di giorni tra 2 date.

Argomenti facoltativi

Puoi anche passare argomenti facoltativi a una funzione. In altre parole, a volte potresti aver bisogno dell'argomento e altre volte no, a seconda del codice con cui stai usando la funzione .

123456 Funzione CalculateDayDiff(Date1 as Date, Optional Date2 as Date) as Double'controlla la seconda data e, in caso contrario, imposta Date2 uguale alla data odierna.Se Data2=0 allora Data2 = Data'calcola differenzaCalculateDayDiff = Date2-Date1Fine funzione

Valore argomento predefinito

Puoi anche impostare il valore predefinito degli argomenti opzionali quando crei la funzione in modo che se l'utente omette l'argomento, verrà utilizzato il valore che hai inserito come predefinito.

1234 Funzione CalculateDayDiff(Date1 as Date, Optional Date2 as Date="06/02/2020") as Double'calcola differenzaCalculateDayDiff = Date2-Date1Fine funzione

ByVal e ByRef

Quando si passano valori a una funzione, è possibile utilizzare il ByVal o ByRef parole chiave. Se ometti uno di questi, il ByRef viene utilizzato come predefinito.

ByVal significa che stai passando una copia della variabile alla funzione, mentre ByRef significa che ti riferisci al valore originale della variabile. Quando passi una copia della variabile (ByVal), il valore originale della variabile è NON modificato, ma quando si fa riferimento alla variabile, il valore originale della variabile viene modificato dalla funzione.

1234 Funzione GetValue(ByRef intA As Integer) As IntegerintA = intA * 4OttieniValore = intAFine funzione

Nella funzione sopra, ByRef potrebbe essere omesso e la funzione funzionerebbe allo stesso modo.

1234 Funzione GetValue(intA As Integer) As IntegerintA = intA * 4OttieniValore = intAFine funzione

Per chiamare questa funzione, possiamo eseguire una procedura secondaria.

123456789 Sub TestValues()Dim intVal As Integer'popola la variabile con il valore 10intVal = 10'esegui la funzione GetValue e mostra il valore nella finestra immediataDebug.Print GetValue(intVal)'mostra il valore della variabile intVal nella finestra immediataDebug.Print intValFine sottotitolo

Notare che le finestre di debug mostrano il valore 40 entrambe le volte. Quando si passa la variabile IntVal alla funzione, il valore di 10 viene passato alla funzione e moltiplicato per 4. Utilizzando la parola chiave ByRef (o omettendola del tutto), si MODIFICA il valore della variabile IntVal. Questo viene mostrato quando si mostra prima il risultato della funzione nella finestra immediata (40), e poi il valore della variabile IntVal nella finestra di debug (anche 40).

Se NON vogliamo cambiare il valore della variabile originale, dobbiamo usare ByVal nella funzione.

1234 Funzione GetValue(ByVal intA As Integer) As IntegerintA = intA * 4OttieniValore = intAFine funzione

Ora se chiamiamo la funzione da una sottoprocedura, il valore della variabile IntVal rimarrà a 10.

Esci dalla funzione

Se crei una funzione che verifica una determinata condizione e una volta che la condizione è vera, vuoi restituire il valore dalla funzione, potresti dover aggiungere un'istruzione Exit Function nella tua Function per uscire dalla funzione prima hai eseguito tutto il codice in quella funzione.

12345678910111213 Funzione TrovaNumber(strSearch As String) As IntegerDim i As Integer'loop attraverso ogni lettera nella stringaPer i = 1 a Len(strSearch)'se la lettera è numerica, restituisce il valore alla funzioneIf IsNumeric(Mid(strSearch, i, 1)) ThenTrovaNumero= Mid(strSearch, i, 1)'quindi esci dalla funzioneEsci dalla funzioneFinisci seProssimoTrovaNumero= 0Fine funzione

La funzione precedente eseguirà il ciclo della stringa fornita finché non trova un numero, quindi restituirà quel numero dalla stringa. Troverà solo il primo numero nella stringa come farà allora Uscita la funzione.

La funzione sopra può essere chiamata da una routine Sub come quella sotto.

1234567 Sub CheckForNumber()Dim NumIs come Integer'passa una stringa di testo alla funzione trova numeroNumIs = FindNumber("Piano superiore, 8 Oak Lane, Texas")'mostra il risultato nella finestra immediataDebug.Stampa NumIsFine sottotitolo

Utilizzo di una funzione all'interno di un foglio Excel

Oltre a chiamare una funzione dal codice VBA utilizzando una procedura secondaria, puoi anche chiamare la funzione dal foglio Excel. Le funzioni che hai creato dovrebbero apparire per impostazione predefinita nell'elenco delle funzioni nella sezione Definito dall'utente dell'elenco delle funzioni.

Clicca sul fx per visualizzare la finestra di dialogo Inserisci funzione.

Selezionare Definito dall'utente dall'elenco delle categorie

Seleziona la funzione desiderata tra quelle disponibili Funzioni definite dall'utente (UDF).

In alternativa, quando inizi a scrivere la tua funzione in Excel, la funzione dovrebbe apparire nell'elenco a discesa delle funzioni.

Se non vuoi che la funzione sia disponibile all'interno di un foglio Excel, devi mettere la parola Privata davanti alla parola Funzione quando crei la funzione nel tuo codice VBA.

123 Funzione privata CalculateDayDiff(Date1 as Date, Date2 as Date) as DoubleCalculateDayDiff = Date2-Date1Fine funzione

Ora non apparirà nell'elenco a discesa che mostra le funzioni di Excel disponibili.

È interessante notare, tuttavia, che puoi ancora utilizzare la funzione: semplicemente non apparirà nell'elenco quando la cerchi!

Se hai dichiarato il secondo argomento come Opzionale, puoi ometterlo nel foglio Excel e nel codice VBA.

Puoi anche usare la funzione a che hai creato senza argomenti nel tuo foglio Excel.

Aiuterete lo sviluppo del sito, condividere la pagina con i tuoi amici

wave wave wave wave wave