Subroutine VBA di Excel: come chiamare Sub in VBA con l'esempio

⚡ Riepilogo intelligente

Una subroutine VBA di Excel raggruppa un blocco di codice che esegue un'attività senza restituire un valore. Questa pagina illustra le regole di denominazione, la sintassi di Sub, come richiamare una subroutine da un pulsante di comando e le differenze tra una subroutine e una funzione.

  • 📦 Definizione: Una subroutine esegue un'attività specifica e non restituisce alcun valore al codice che l'ha chiamata.
  • ♻️ Riusabilità: Una subroutine può essere richiamata più volte da qualsiasi punto del progetto.
  • 🔤 Regole di denominazione: Un nome non contiene spazi, inizia con una lettera o un trattino basso e non è mai una parola chiave VBA.
  • 🧾 Sintassi: La subroutine Private Sub name(ByVal arg As String) apre il blocco e End Sub lo chiude.
  • 🖱️ Chiamata: L'evento Click di un pulsante di comando richiama la subroutine e le passa gli argomenti.
  • ▶ ️ Esecuzione diretta: Premendo F5, aprendo la finestra di dialogo Macro o utilizzando la parola chiave Chiama, è possibile eseguire una subroutine senza utilizzare un pulsante.
  • 🔁 Sottocategoria o funzione: Scegli una Funzione quando è necessario restituire un valore, altrimenti scegli una Sub.

Sottoprogramma VBA di Excel

Cos'è una subroutine in VBA?

A Sottoprogramma in VBA è un pezzo di codice che esegue un'attività specifica descritta nel codice ma non restituisce un risultato o un valore. Le subroutine vengono utilizzate per scomporre grandi porzioni di codice in piccole parti gestibili. Le subroutine possono essere richiamate più volte da qualsiasi punto del programma.

Supponiamo che tu abbia creato un'interfaccia utente con caselle di testo per accettare dati di input utente. Puoi creare una subroutine che cancella il contenuto delle caselle di testo. Una subroutine di chiamata VBA è appropriata in uno scenario del genere perché non vuoi restituire alcun risultato.

Perché utilizzare le subroutine

  • Suddividi il codice in piccolo codice gestibile: Un programma per computer medio ha migliaia e migliaia di righe di codice sorgente. Ciò introduce complessità. Le subroutine aiutano a risolvere questo problema suddividendo il programma in piccoli pezzi di codice gestibili.
  • Code riusabilità. Supponiamo che tu abbia un programma che deve accedere al database, quasi tutte le finestre del programma dovranno interagire con il database. Invece di scrivere codice separato per queste finestre, puoi creare una funzione che gestisce tutte le interazioni con il database. Puoi quindi chiamarla da qualsiasi finestra tu voglia.
  • Le subroutine e le funzioni sono autodocumentanti. Supponiamo che tu abbia una funzione calcolaLoanInterest e un'altra che dice connectToDatabase. Semplicemente guardando il nome della subroutine/funzione, il programmatore sarà in grado di capire cosa fa il programma.

Prima di scriverlo, il compilatore si aspetta che il nome segua una breve serie di regole.

Regole per denominare subroutine e funzioni

Per utilizzare subroutine e funzioni, è necessario seguire una serie di regole.

  • Il nome di una subroutine o di una funzione di chiamata VBA non può contenere spazi
  • Un nome di funzione o una chiamata secondaria VBA di Excel deve iniziare con una lettera o un carattere di sottolineatura. Non può iniziare con un numero o un carattere speciale
  • Il nome di una subroutine o di una funzione non può essere una parola chiave. Una parola chiave è una parola che ha un significato speciale in VBA. Parole come Private, Sub, Function e End, ecc. sono tutti esempi di parole chiave. Il compilatore li utilizza per compiti specifici.

Una volta scelto un nome valido, la dichiarazione stessa segue uno schema fisso.

Sintassi della subroutine VBA

Dovrai abilitare la scheda Sviluppatore in Excel per seguire questo esempio. Se non sai come abilitare la scheda Sviluppatore, leggi il tutorial su Controlli VBA in Excel

QUI nella sintassi,

Private Sub mySubRoutine(ByVal arg1 As String, ByVal arg2 As String)
    'do something
End Sub

Spiegazione della sintassi

Code Action
  • "Sottotitolo privato mySubRoutine(...)"
  • Qui la parola chiave "Sub" viene utilizzata per dichiarare una subroutine denominata "mySubRoutine" e avviare il corpo della subroutine.
  • La parola chiave Private viene utilizzata per specificare l'ambito della subroutine
  • "ByVal arg1 come stringa, ByVal arg2 come stringa":
  • Dichiara due parametri di tipo di dati stringa denominati arg1 e arg2
  • "Fine sottotitolo"
  • "End Sub" viene utilizzato per terminare il corpo della subroutine

La seguente subroutine accetta il nome e il cognome e li visualizza in una finestra di messaggio.

Ora programmeremo ed eseguiremo questa Sub Procedure. Vediamo questo.

Come chiamare Sub in VBA

Di seguito è riportato un processo passo passo su come chiamare Sub in VBA:

  1. Progettare l'interfaccia utente e impostare le proprietà per i controlli utente.
  2. Aggiungi la subroutine
  3. Scrivere il codice dell'evento clic per il pulsante di comando che richiama la subroutine
  4. Prova l'applicazione

Passo 1) Interfaccia utente

Progetta l'interfaccia utente come mostrato nell'immagine seguente.

Come chiamare Sub in VBA

Imposta le seguenti proprietà. Le proprietà che stiamo impostando:

S / N Controllate Proprietà Valore
1 PulsanteComando1 Nome btnDisplayFullName
2 Didascalia Subroutine nome completo

La tua interfaccia ora dovrebbe apparire come segue.

Come chiamare Sub in VBA

Passo 2) Aggiungi subroutine

  1. Premi Alt + F11 per aprire la finestra del codice
  2. Aggiungere la seguente subroutine
Private Sub displayFullName(ByVal firstName As String, ByVal lastName As String)
    MsgBox firstName & " " & lastName
End Sub

QUI nel codice,

Code Azione
  • "Sottotitolo privato displayFullName(...)"
  • Dichiara una subroutine privata displayFullName che accetta due parametri stringa.
  • "ByVal firstName come stringa, ByVal lastName come stringa"
  • Dichiara due variabili parametro firstName e lastName
  • MsgBox nome e cognome"
  • Chiama il monsBox funzione incorporata per visualizzare una casella di messaggio. Quindi passa le variabili 'firstName' e 'lastName' come parametri.
  • La e commerciale "&" viene utilizzata per concatenare le due variabili e aggiungere uno spazio vuoto tra di loro.

Passo 3) Chiamare la subroutine

Chiamare la subroutine dall'evento clic del pulsante di comando.

  • Fai clic con il pulsante destro del mouse sul pulsante di comando come mostrato nell'immagine sottostante. Seleziona Visualizza Code.
  • Si aprirà l'editor del codice

Come chiamare Sub in VBA

Aggiungere il seguente codice nell'editor di codice per l'evento click del pulsante di comando btnDisplayFullName.

Private Sub btnDisplayFullName_Click()
    displayFullName "John", "Doe"
End Sub

La finestra del codice ora dovrebbe apparire come segue

Come chiamare Sub in VBA

Salva le modifiche e chiudi la finestra del codice.

Passo 4) Testare il codice

Sulla barra degli strumenti dello sviluppatore disattiva la modalità di progettazione. Come mostrato di seguito.

Come chiamare Sub in VBA

Passo 5) Fare clic sul pulsante di comando 'Subroutine FullName'.

Otterrai i seguenti risultati

Come chiamare Sub in VBA

Scarica il file Excel qui sopra Code

Un pulsante è comodo, ma non è l'unico modo per avviare una subroutine e, durante lo sviluppo, raramente è il più veloce.

Come eseguire una subroutine senza un pulsante

Mentre stai ancora scrivendo il codice, aggiungere un controllo al foglio solo per testare una subroutine è una perdita di tempo. VBA offre altri quattro modi per eseguirne una, ognuno adatto a una fase diversa del ciclo di sviluppo.

  • Premi F5 nell'editor: Posiziona il cursore in un punto qualsiasi all'interno della Sub e premi F5. L'esecuzione avviene immediatamente. Questo funziona solo quando la Sub non accetta argomenti, perché VBA non ha valori da fornire.
  • Esegui la procedura passo passo con F8: La stessa esecuzione, una riga alla volta, in modo da poter osservare ogni variazione di variabile nella finestra Variabili locali. Utilizzala quando un risultato è errato e devi capire dove si trova l'errore.
  • Utilizzare la finestra di dialogo Macro: Nella scheda Sviluppatore, fai clic su Macro, seleziona il nome e fai clic su Esegui. In questo elenco vengono visualizzate solo le Sub pubbliche senza argomenti, motivo per cui una Sub di supporto viene solitamente dichiarata privata.
  • Chiamalo da un altro Sub: Questo è il metodo utilizzato per qualsiasi Sub che accetta argomenti, ed è quello su cui si basa il pulsante di comando qui sopra.

L'ultima opzione prevede due forme accettabili. Scrivere il nome seguito da argomenti semplici funziona, così come utilizzare esplicitamente la parola chiave Call, ma la regola per le parentesi quadre è diversa in entrambi i casi.

Sub RunTheGreeting()
    ' Form 1: no Call keyword, no brackets
    displayFullName "John", "Doe"

    ' Form 2: Call keyword, brackets required
    Call displayFullName("Jane", "Roe")
End Sub

Entrambe le righe svolgono esattamente la stessa funzione. Mescolare le due forme, scrivendo le parentesi senza la parola chiave Call, è la causa più comune dell'errore di compilazione "Expected: =" quando una Sub accetta più di un argomento.

Differenza tra una Sub e una Function in VBA

Sub e Function sono i due tipi di procedura in VBA, e i principianti spesso scelgono quello sbagliato. La domanda decisiva è semplice: il codice chiamante ha bisogno di un valore in cambio?

Caratteristica Sub Funzione
Restituisce un valore Non Sì, assegnato al nome della funzione
Dichiarato con Sub … Fine Sub Funzione … Fine funzione
chiamato come Una dichiarazione a sé stante Parte di un'espressione, ad esempio x = myFunc(2)
Utilizzabile in una cella del foglio di lavoro Non Sì, come funzione definita dall'utente
Utilizzo tipico Formatta un foglio, cancella i dati inseriti, mostra un messaggio Calcola un totale, converti un valore, cerca i dati

Utilizzare una Sub quando il codice agisce sulla cartella di lavoro e una Funzione VBA quando il codice produce una risposta che viene poi utilizzata da qualcos'altro.

DOMANDE FREQUENTI

Una subroutine privata può essere chiamata solo dall'interno del modulo che la dichiara. Una subroutine pubblica è visibile a tutti i moduli del progetto ed è l'unico tipo che compare nella finestra di dialogo Macro.

ByVal passa una copia, quindi la subroutine non può modificare la variabile del chiamante. ByRef passa la variabile stessa, quindi qualsiasi modifica è visibile al chiamante. ByRef è l'impostazione predefinita quando non viene specificata nessuna delle due parole chiave.

Utilizza l'istruzione Exit Sub. Questa istruzione interrompe la procedura in quel punto e restituisce il controllo a chi l'ha chiamata, il che è utile per uscire anticipatamente quando un test di validazione fallisce.

Sì. Incolla la macro e un assistente IA raggruppa le righe correlate, suggerisce un nome descrittivo per ogni nuova Sub e riscrive l'originale come una breve sequenza di chiamate. Verifica il risultato su una copia della cartella di lavoro.

Sì. Basta fornirgli il testo dell'errore e la riga di chiamata, e un assistente basato sull'intelligenza artificiale identifica le cause, come ad esempio l'uso di parentesi senza la parola chiave Call, un numero errato di argomenti o un tipo di dati non corrispondente, per poi fornire la riga corretta.

Riassumi questo post con: