Procedure "Funzione" e "Sub" in VBA

Funzioni VBA integrate

Prima di iniziare a creare le tue funzioni VBA, è bene sapere che Excel VBA ha una ricca raccolta di funzioni integrate predefinite che puoi utilizzare durante la scrittura del codice.

Un elenco di queste funzioni può essere visualizzato nell'editor VBA:

  • Apri una cartella di lavoro di Excel e avvia l'editor VBA (fai clic per farlo Alt + F11), quindi premere F2.
  • Seleziona una libreria dall'elenco a discesa in alto a sinistra dello schermo VBA.
  • Apparirà un elenco di classi e funzioni VBA integrate. Fare clic sul nome della funzione per visualizzare la sua breve descrizione nella parte inferiore della finestra. premendo F1 aprirà la pagina della guida in linea per quella funzione.

Inoltre, è possibile trovare un elenco completo delle funzioni VBA integrate con esempi nel Visual Basic Developer Center.

Procedure personalizzate “Funzione” e “Sub” in VBA

In Excel Visual Basic, una serie di comandi che eseguono un'attività specifica viene inserita in una procedura. Funzione (Funzione) o Sub (Sottoprogramma). La principale differenza tra le procedure Funzione и Sub è questa la procedura Funzione restituisce risultato, procedura Sub - non.

Pertanto, se è necessario eseguire azioni e ottenere risultati (ad esempio sommare più numeri), viene solitamente utilizzata la procedura Funzione, e per eseguire semplicemente alcune azioni (ad esempio modificare la formattazione di un gruppo di celle), è necessario selezionare la procedura Sub.

argomenti

Vari dati possono essere passati alle procedure VBA usando argomenti. L'elenco degli argomenti viene specificato quando si dichiara una procedura. Ad esempio, la procedura Sub in VBA aggiunge l'intero dato (Integer) a ciascuna cella nell'intervallo selezionato. Puoi passare questo numero alla procedura usando un argomento, come questo:

Sub AddToCells(i As Integer) ... End Sub

Tieni presente che avere argomenti per le procedure Funzione и Sub in VBA è facoltativo. Alcune procedure non richiedono argomenti.

Argomenti facoltativi

Le procedure VBA possono avere argomenti facoltativi. Questi sono argomenti che l'utente può specificare se lo desidera e, se vengono omessi, la procedura utilizza per essi i valori predefiniti.

Tornando all'esempio precedente, per rendere opzionale un argomento intero a una funzione, sarebbe dichiarato in questo modo:

Sub AddToCells(Facoltativo i As Integer = 0)

In questo caso, l'argomento intero i il valore predefinito sarà 0.

Ci possono essere diversi argomenti facoltativi in ​​una procedura, tutti elencati alla fine dell'elenco degli argomenti.

Passare argomenti per valore e per riferimento

Gli argomenti in VBA possono essere passati a una procedura in due modi:

  • Per Val – passare un argomento per valore. Ciò significa che solo il valore (cioè una copia dell'argomento) viene passato alla procedura, e quindi tutte le modifiche apportate all'argomento all'interno della procedura andranno perse all'uscita della procedura.
  • PerRef – passare un argomento per riferimento. Cioè, l'indirizzo effettivo della posizione dell'argomento in memoria viene passato alla procedura. Eventuali modifiche apportate a un argomento all'interno della procedura verranno salvate all'uscita della procedura.

Utilizzo di parole chiave Per Val or PerRef nella dichiarazione della procedura, puoi specificare come l'argomento viene passato alla procedura. Questo è mostrato negli esempi seguenti:

Sub AddToCells(ByVal i As Integer) ... End Sub
In questo caso, l'argomento intero i passato per valore. Dopo aver lasciato la procedura Sub tutto fatto con i le modifiche andranno perse.
Sub AddToCells(ByRef i As Integer) ... End Sub
In questo caso, l'argomento intero i passato per riferimento. Dopo aver lasciato la procedura Sub tutto fatto con i le modifiche verranno memorizzate nella variabile passata alla procedura Sub.

Ricorda che gli argomenti in VBA vengono passati per riferimento per impostazione predefinita. In altre parole, se le parole chiave non vengono utilizzate Per Val or PerRef, l'argomento verrà passato per riferimento.

Prima di procedere con le procedure Funzione и Sub più in dettaglio, sarà utile approfondire le caratteristiche e le differenze tra questi due tipi di procedure. Di seguito sono riportate brevi discussioni sulle procedure VBA Funzione и Sub e vengono mostrati semplici esempi.

Procedura VBA «Funzione»

L'editor VBA riconosce la procedura Funzionequando incontra un gruppo di comandi racchiusi tra le seguenti istruzioni di apertura e chiusura:

Funzione ... Fine della funzione

Come accennato in precedenza, la procedura Funzione in VBA (al contrario di Sub) restituisce un valore. Le seguenti regole si applicano alla restituzione dei valori:

  • Il tipo di dati del valore restituito deve essere dichiarato nell'intestazione della procedura Funzione.
  • La variabile che contiene il valore restituito deve avere lo stesso nome della procedura Funzione. Questa variabile non ha bisogno di essere dichiarata separatamente, in quanto esiste sempre come parte integrante della procedura. Funzione.

Ciò è ben illustrato nell'esempio seguente.

Esempio di funzione VBA: esecuzione di un'operazione matematica su 3 numeri

Di seguito è riportato un esempio di codice di procedura VBA Funzione, che accetta tre argomenti di tipo Doppio (numeri a virgola mobile a precisione doppia). Di conseguenza, la procedura restituisce un altro numero di tipo Doppiouguale alla somma dei primi due argomenti meno il terzo argomento:

Funzione SumMinus(dNum1 As Double, dNum2 As Double, dNum3 As Double) As Double SumMinus = dNum1 + dNum2 - dNum3 End Function

Questa procedura VBA molto semplice Funzione illustra come i dati vengono passati a una procedura tramite argomenti. Puoi vedere che il tipo di dati restituito dalla procedura è definito come Doppio (le parole dicono Come doppio dopo l'elenco degli argomenti). Questo esempio mostra anche come il risultato della procedura Funzione memorizzato in una variabile con lo stesso nome del nome della procedura.

Chiamare la procedura VBA "Funzione"

Se la procedura semplice di cui sopra Funzione inserito in un modulo nell'editor di Visual Basic, può essere chiamato da altre procedure VBA o utilizzato su un foglio di lavoro in una cartella di lavoro di Excel.

Chiamare la procedura VBA "Funzione" da un'altra procedura

Procedura Funzione può essere chiamato da un'altra procedura VBA semplicemente assegnando quella procedura a una variabile. L'esempio seguente mostra una chiamata a una procedura Suminus, che è stato definito sopra.

Sub main() Dim total as Double total = SumMinus(5, 4, 3) End Sub

Chiama la procedura VBA "Funzione" da un foglio di lavoro

Procedura VBA Funzione può essere chiamato da un foglio di lavoro di Excel allo stesso modo di qualsiasi altra funzione integrata di Excel. Pertanto, la procedura creata nell'esempio precedente Funzione - Suminus può essere chiamato immettendo la seguente espressione in una cella del foglio di lavoro:

=SumMinus(10, 5, 2)

Procedura VBA «Sub»

L'editor VBA comprende che c'è una procedura davanti ad esso Subquando incontra un gruppo di comandi racchiusi tra le seguenti istruzioni di apertura e chiusura:

Sub... Fine Sub

Procedura VBA “Sub”: Esempio 1. Allineamento al centro e modifica della dimensione del carattere in un intervallo di celle selezionato

Considera un esempio di una semplice procedura VBA Sub, il cui compito è modificare la formattazione dell'intervallo di celle selezionato. Le celle sono centrate (sia verticalmente che orizzontalmente) e la dimensione del carattere viene modificata in base a quella specificata dall'utente:

Sub Format_Centered_And_Sized (iFontSize opzionale come intero = 10) Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Size = iFontSize End Sub

Questa procedura Sub esegue azioni ma non restituisce un risultato.

Questo esempio usa anche un argomento Optional Dimensione del font. Se l'argomento Dimensione del font non passato a procedura Sub, il suo valore predefinito è 10. Tuttavia, se l'argomento Dimensione del font passato a procedura Sub, l'intervallo di celle selezionato verrà impostato sulla dimensione del carattere specificata dall'utente.

Procedura secondaria VBA: esempio 2: allineamento al centro e carattere grassetto nell'intervallo di celle selezionato

La procedura seguente è simile a quella appena discussa, ma questa volta, invece di ridimensionare, applica uno stile di carattere in grassetto all'intervallo di celle selezionato. Questa è una procedura di esempio Sub, che non accetta argomenti:

Sub Format_Centered_And_Bold() Selection.HorizontalAlignment = xlCenter Selection.VerticalAlignment = xlCenter Selection.Font.Bold = True End Sub

Chiamare la procedura "Sub" in Excel VBA

Chiama la procedura VBA "Sub" da un'altra procedura

Per chiamare una procedura VBA Sub da un'altra procedura VBA, devi scrivere la parola chiave Call, nome della procedura Sub e più avanti tra parentesi sono gli argomenti della procedura. Questo è mostrato nell'esempio seguente:

Sub main() Call Format_Centered_And_Sized(20) End Sub

Se la procedura Formato_centrato_e_dimensionato ha più di un argomento, devono essere separati da virgole. Come questo:

Sub main() Call Format_Centered_And_Sized(arg1, arg2, ...) End Sub

Chiama la procedura VBA "Sub" dal foglio di lavoro

Procedura Sub non può essere inserito direttamente in una cella di un foglio Excel, come si può fare con una procedura Funzioneperché la procedura Sub non restituisce un valore. Tuttavia, le procedure Sub, che non hanno argomenti e sono dichiarati come Pubblico (come mostrato di seguito) sarà disponibile per gli utenti del foglio di lavoro. Pertanto, se le semplici procedure discusse sopra Sub inserito in un modulo nell'editor di Visual Basic, la procedura Formato_centrato_e_grassetto sarà disponibile per l'uso in un foglio di lavoro Excel e la procedura Formato_centrato_e_dimensionato – non sarà disponibile perché ha argomenti.

Ecco un modo semplice per eseguire (o eseguire) una procedura Sub, accessibile dal foglio di lavoro:

  • Rassegna Stampa Alt + F8 (premere il tasto altro e tenendolo premuto premere il tasto F8).
  • Nell'elenco delle macro visualizzato, seleziona quella che desideri eseguire.
  • Rassegna Stampa Correre (correre)

Per eseguire una procedura Sub in modo rapido e semplice, puoi assegnargli una scorciatoia da tastiera. Per questo:

  • Rassegna Stampa Alt + F8.
  • Nell'elenco delle macro che appare, seleziona quella a cui vuoi assegnare una scorciatoia da tastiera.
  • Rassegna Stampa parametri (Opzioni) e nella finestra di dialogo visualizzata, immettere la scorciatoia da tastiera.
  • Rassegna Stampa OK e chiudere la finestra di dialogo Macro (Macro).

Attenzione: Quando si assegna una scorciatoia da tastiera a una macro, assicurarsi che non sia utilizzata come standard in Excel (ad esempio, Ctrl + C). Se selezioni una scorciatoia da tastiera già esistente, verrà riassegnata alla macro e, di conseguenza, l'utente potrebbe avviare la macro per errore.

Ambito della procedura VBA

La parte 2 di questo tutorial ha discusso l'ambito di variabili e costanti e il ruolo delle parole chiave. Pubblico и Privata. Queste parole chiave possono essere utilizzate anche con le procedure VBA:

Public Sub AddToCells(i As Integer) ... End Sub
Se la dichiarazione di procedura è preceduta dalla parola chiave Pubblico, la procedura sarà disponibile per tutti i moduli in quel progetto VBA.
Private Sub AddToCells(i As Integer) ... End Sub
Se la dichiarazione di procedura è preceduta dalla parola chiave Privata, allora questa procedura sarà disponibile solo per il modulo corrente. Non può essere chiamato mentre si trova in nessun altro modulo o da una cartella di lavoro di Excel.

Ricorda che se prima di dichiarare una procedura VBA Funzione or Sub non è inserita, la proprietà predefinita è impostata per la procedura Pubblico (ovvero, sarà disponibile ovunque in questo progetto VBA). Ciò è in contrasto con le dichiarazioni di variabili, che per impostazione predefinita lo sono Privata.

Uscita anticipata dalle procedure VBA “Funzione” e “Sub”

Se è necessario terminare l'esecuzione di una procedura VBA Funzione or Sub, senza aspettare la sua fine naturale, allora per questo ci sono gli operatori Esci dalla funzione и Exit Sub. L'uso di questi operatori è mostrato di seguito utilizzando una semplice procedura come esempio. FunzioneA che si aspetta di ricevere un argomento positivo per eseguire ulteriori operazioni. Se alla procedura viene passato un valore non positivo, non è possibile eseguire ulteriori operazioni, quindi all'utente dovrebbe essere visualizzato un messaggio di errore e la procedura dovrebbe uscire immediatamente:

Funzione VAT_Amount(sVAT_Rate As Single) As Single VAT_Amount = 0 Se sVAT_Rate <= 0 Allora MsgBox "Previsto un valore positivo di sVAT_Rate ma ricevuto" & sVAT_Rate Exit Function End If ... End Function

Si prega di notare che prima di completare la procedura Funzione - Importo IVA, nel codice viene inserita una funzione VBA incorporata MsgBox, che visualizza un popup di avviso per l'utente.

Lascia un Commento