VBA ByVal - Come utilizzare l'argomento della funzione ByVal? (Esempi)

Argomento della funzione ByVal di Excel VBA

ByVal è una dichiarazione in VBA. ByVal sta per By Value cioè quando la sottoprocedura richiamata dalla procedura il valore delle variabili viene reimpostato al nuovo valore dalla nuova procedura richiamata.

In VBA, quando lavoriamo con funzioni chiamate in funzioni diverse, in alcune circostanze il valore per l'argomento originale viene modificato quando la funzione viene chiamata; l'istruzione byval proibisce la procedura o il codice che modifica il valore per l'argomento.

So che non è facile da capire leggendo la spiegazione, ma con esempi pratici di funzione, possiamo effettivamente capire meglio.

Come utilizzare ByVal Argument in VBA?

Esempio 1

Ad esempio, guarda i seguenti codici VBA.

Codice:

Sub Macro1 () Dim k As Integer k = 50 Macro2 k MsgBox k End Sub
Sub Macro2 (ByVal k As Integer) k = k + 5 End Sub

Nelle due procedure macro precedenti, abbiamo una variabile comune "k" tra le procedure. Lasciatemi spiegare questo in dettaglio prima di vedere il risultato.

Nella prima Macro, abbiamo assegnato il valore di 50 alla variabile "k".

Dim k As Integer k = 50

Successivamente, abbiamo chiamato la seconda procedura macro dalla prima macro.

Macro2 k

Nella Macro2 abbiamo reimpostato il valore della variabile a k = k + 5. In questa macro abbiamo utilizzato l'argomento ByVal per assegnare il valore alla variabile "k".

Ora per capire "ByVal", eseguiamo il codice VBA riga per riga premendo il tasto F8.

# 1 - Premendo prima il tasto F8, evidenzierà la prima riga della Macro1.

A questo punto, posiziona un cursore sulla variabile "k" e dovrebbe mostrare il valore della variabile "k".

Al momento, il valore di "k" è zero.

# 2 - Premi ancora una volta il tasto F8 e salterà alla terza riga.

Anche adesso, il valore di "k" è ancora zero.

# 3 - Premi il tasto F8 ora e vedi il valore di k.

Poiché il valore "k" è impostato su 50 e il codice viene eseguito, quindi il valore viene visualizzato come 50.

# 4 - Ora, la riga evidenziata è "Macro2 k", ovvero, premendo il tasto F8, salterà alla seconda procedura, Macro2.

# 5 - Anche ora, il valore della variabile "k" in questa procedura mostra anche come 50. Ma all'interno di questa macro, stiamo resettando il valore della variabile "k" come k = k + 5 cioè 55. Ora premi il tasto Tasto F8 altre due volte.

Come puoi vedere sopra, il valore "k" ora è 55.

# 6 - Premere il tasto F8 e tornerà alla procedura Macro1.

Quando la macro è tornata alla procedura originale Macro1, il valore della nostra variabile "k" non è più 55 piuttosto il valore originale in questa procedura, ovvero 50.

Quando si preme il tasto F8, possiamo vedere solo 50 nella finestra del messaggio in VBA.

Quindi, come abbiamo detto all'inizio dell'articolo, l'argomento "ByVal" non trasporta valori da una procedura all'altra, anche se trasporta il valore della variabile dalla prima macro alla seconda nel momento in cui incontra la riga " ByVal ”quando torna alla macro originale ripristina il valore al valore originale solo nella procedura.

Esempio n. 2

Ora dai un'occhiata alle due macro seguenti.

Codice:

Sub P1 () Dim k As Integer: k = 10 Chiama P2 (k) MsgBox k End Sub
Sub P2 (ByVal k As Integer) k = 15 End Sub
  • Questo è simile al primo esempio. Nella macro "P1" abbiamo assegnato il valore 10 alla variabile "k" e nella stessa macro "P1" abbiamo chiamato la seconda macro "P2" con variabile "k".
  • Nella seconda macro "P2" abbiamo utilizzato l'argomento ByVal e questa volta il valore della variabile "k" è 15.

Questa macro porta il valore della variabile "k" come dieci dalla macro "P1" alla macro "P2" e in questa macro, il valore verrà reimpostato a 15, ma nel momento in cui ritorna per finire la macro alla prima macro "P1" il valore di "k" torna a 10, non 15.

Cose da ricordare

L'argomento ByVal non influenza il valore della variabile anche dopo aver eseguito la macro, ma con l'argomento ByRef possiamo trasferire il valore della variabile da una macro all'altra.

Articoli interessanti...