Scrivere la Tua Prima Procedura VBA
Scorri per mostrare il menu
La registrazione delle macro insegna il vocabolario; scriverne una da zero è il punto in cui si inizia a pensare come un programmatore.
Anatomia di una Sub Procedure
Ogni blocco riutilizzabile di codice VBA che esegue un'azione (anziché restituire un valore, come fa una Function) viene scritto come una Sub:
Sub ProcedureName()
' instructions go here
End Sub
Con il cursore posizionato all'interno di una Sub, premere F5 (o cliccare sulla freccia verde Esegui) per eseguirla. I commenti — qualsiasi riga che inizia con un apostrofo (') — vengono completamente ignorati da VBA; utilizzarli generosamente per spiegare perché il codice fa qualcosa, non solo cosa fa, poiché il cosa di solito è evidente leggendo il codice stesso.
Abitudini di formattazione che danno risultati immediati
- Digitare
Option Explicitin cima a ogni modulo — obbliga a dichiarare ogni variabile, aiutando a individuare errori di battitura prima che diventino bug; - Rientrare il codice all'interno di cicli e blocchi
Ifcon un Tab — l'editor VBE non lo impone, ma il codice senza rientri diventa rapidamente illeggibile; - Usare nomi descrittivi (
HighEarnerCount, nonx) — sarà utile in futuro.
Esempio pratico: Evidenziare i redditi alti
Scriviamo manualmente una procedura che esamina ogni dipendente nella tabella ed evidenzia chi guadagna più di $55,000 — qualcosa che il registratore di macro non potrebbe mai fare, perché richiede una decisione (un'istruzione If) ripetuta per ogni riga (un ciclo).
Option Explicit
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
Dim ws As Worksheet / Dim i As Long— queste dichiarano due variabili:wsconterrà un riferimento al foglio Employees, eiservirà per contare le righe;- Set
ws = ThisWorkbook.Worksheets("Employees")— questa è la buona pratica dell'object model: nominare esplicitamente il foglio invece di affidarsi a quello attivo; ws.Cells(ws.Rows.Count, 1).End(xlUp).Row— un'espressione standard che trova l'ultima riga utilizzata nella colonnaA, indipendentemente dal numero di dipendenti nella tabella;For i = 2 To lastRow ... Next i— un ciclo che ripete il codice per ogni riga di dati, iniziando dalla riga 2 per saltare l'intestazione;- If
ws.Cells(i, 6).Value > 55000 Then— una decisione: solo le righe in cui la colonna Salary (colonna 6) supera 55000 vengono formattate; MsgBox— una semplice finestra pop-up che conferma il completamento della macro.
Digita questa procedura in modIntro, posiziona il cursore al suo interno e premi F5. Verifica tu stesso i numeri — Emma Davis e Olivia Brown sono i due dipendenti che guadagnano più di $55.000 nella tabella di esempio.
Attività
- Digita
HighlightTopEarnersesattamente come mostrato in modIntro ed eseguila. Conferma che due righe diventano verdi. - Duplica la procedura come
HighlightITDepartmente modifica la condizione in modo che evidenzi qualsiasi riga in cui il Dipartimento (colonna 3) è uguale a "IT" invece di controllare lo Stipendio. - Aggiungi un commento sopra ogni procedura che spieghi, in una frase, cosa fa — esercitati a scrivere commenti per il lettore, non per te stesso.
- Salva nuovamente la cartella di lavoro (è ancora
.xlsm, quindi un normaleCtrl+Sva bene).
- Seleziona l'intera procedura
HighlightTopEarners(daSubaEnd Sub), copiala e incollala subito sotto inmodIntro. - Rinomina la riga
Subdella seconda copia inSub HighlightITDepartment()— ogni procedura in un modulo deve avere un nome univoco, altrimenti VBA non saprà quale eseguire. - La condizione da modificare è la riga
If. Attualmente controlla un numero:
If ws.Cells(i, 6).Value > 55000 Then
Ora deve controllare un testo — la colonna 3 (Dipartimento) deve essere uguale a "IT". Ricorda dal Capitolo 2 che i confronti tra testi richiedono le virgolette attorno al valore da confrontare e si usa = invece di >.
4. Tutto il resto all'interno del ciclo (la riga Interior.Color, la struttura del ciclo stesso) può rimanere esattamente uguale — cambia solo la condizione da verificare.
Aggiunta di commenti
- Una riga di commento inizia con un apostrofo (
') e va su una riga propria direttamente sopra la rigaSub— non all'interno della procedura. - Scrivila come se stessi spiegando la macro a un collega che non l'ha mai vista, non come promemoria per te stesso. Confronta:
- Poco utile:
' scorre le righe(descrive come, cosa che il codice già mostra) - Più utile:
' Evidenzia i dipendenti che guadagnano più di $55.000(descrive cosa realizza, che non è ovvio a colpo d'occhio)
- Poco utile:
- Fai lo stesso per la seconda procedura — una frase che descriva cosa evidenzia e perché, in termini di obiettivo aziendale (personale del dipartimento IT), non della meccanica del ciclo.
' Highlights employees earning over $55,000, to flag top earners at a glance.
Sub HighlightTopEarners()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 6).Value > 55000 Then
ws.Cells(i, 6).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — high earners are highlighted."
End Sub
' Highlights every employee who works in the IT department.
Sub HighlightITDepartment()
Dim ws As Worksheet
Dim i As Long
Dim lastRow As Long
Set ws = ThisWorkbook.Worksheets("Employees")
lastRow = ws.Cells(ws.Rows.Count, 1).End(xlUp).Row
For i = 2 To lastRow
If ws.Cells(i, 3).Value = "IT" Then
ws.Cells(i, 3).Interior.Color = RGB(198, 239, 206)
End If
Next i
MsgBox "Done — IT department is highlighted."
End Sub
Digita entrambe in modIntro, esegui prima HighlightTopEarners e conferma che esattamente due righe diventano verdi (Emma Davis a $62.000 e Sophia Miller a $59.000 — le altre tre sono pari o inferiori a $55.000), poi esegui HighlightITDepartment e conferma che viene evidenziata invece la riga di Sophia Miller. Salva con Ctrl+S una volta che entrambe funzionano.
Grazie per i tuoi commenti!
Chieda ad AI
Chieda ad AI
Chieda pure quello che desidera o provi una delle domande suggerite per iniziare la nostra conversazione