Apri Excel e VBE (Visual Basic Editor). A meno che non sia stata modificata, la finestra VBE contiene la finestra ProjectExplorer e la finestra Properties (a cui è possibile accedere dal menu Visualizza).

Project Explorer: funziona come un file manager. Ti aiuta a navigare nel codice nella tua cartella di lavoro.

Finestra Proprietà: mostra le proprietà dell’oggetto attualmente attivo (ad es. Sheet1) della cartella di lavoro corrente (ad es .Book1).

In questo articolo impareremo come è facile registrare macro in Excel.

Esercizio 1: registrazione di una macro.

Questo esercizio mostra cosa succede quando viene registrata una macro e dimostra la differenza tra la registrazione di riferimenti assoluti e relativi .

  1. In un foglio di lavoro vuoto in una nuova cartella di lavoro, selezionare la cella C10 2. Avviare il registratore di macro con l’opzione per salvare la macro in Questa cartella di lavoro. A questo punto il VBE crea una nuova cartella Modules. È abbastanza sicuro andare a guardarlo: le tue azioni non verranno registrate. Fare clic su [+] accanto alla cartella e vedere che VBE ha inserito un modulo nella cartella e lo ha denominato Module1. Fare doppio clic sull’icona del modulo per aprire la relativa finestra del codice. Torna a Excel.

  2. Assicurati che il pulsante Riferimento relativo sulla barra degli strumenti Stop Recording NON sia premuto.

  3. Selezionare la cella B5 e arrestare il registratore.

  4. Passa al VBE e guarda il codice:

Range (“B5”). Seleziona 6. Ora registra un’altra macro, esattamente allo stesso modo, ma questa volta con il pulsante Relative Reference premuto.

  1. Passa al VBE e guarda il codice:

ActiveCell.Offset (-5, -1) .Range (“A1”). Seleziona 8. Ora registra un’altra macro, ma invece di selezionare la cella B5, seleziona un blocco di celle 3×3 a partire da B5 (seleziona celle B5: F7)

  1. Passa al VBE e guarda il codice:

ActiveCell.Offset (-5, -1) .Range (“A1: B3”). Seleziona 10. Riproduci le macro, avendo prima selezionato una cella diversa da C10 (per Macro2 e Macro3 la cella iniziale deve essere nella riga 6 o di seguito – vedere il passaggio 11 di seguito)

Macro1: sposta sempre la selezione in B5 Macro2: sposta la selezione in una cella di 5 righe in alto e 1 colonna a sinistra della cella selezionata.

Macro3: seleziona sempre un blocco di sei celle a partire da 5 righe in alto e 1 colonna a sinistra della cella selezionata.

  1. Eseguire Macro2 ma imporre un errore selezionando una cella nella riga 5 o sopra. La macro cerca di selezionare una cella inesistente perché il suo codice le dice di selezionare una cella 5 righe sopra il punto di partenza, e questa è fuori dalla parte superiore del foglio. Premere Debug per passare alla parte della macro che ha causato il problema.

NOTA: quando il VBE è in modalità Debug, la riga di codice che ha causato il problema è evidenziata in giallo. È necessario “reimpostare” la macro prima di poter procedere. Fare clic sul pulsante Reimposta sulla barra degli strumenti VBE o andare su Esegui> Reimposta. L’evidenziazione gialla scompare e il VBE esce dalla modalità Debug.

  1. È importante cercare di anticipare l’errore dell’utente in questo modo. Il modo più semplice è modificare il codice per ignorare semplicemente gli errori e passare all’attività successiva. Fallo aggiungendo la riga …​ On Error Resume Next …​ immediatamente sopra la prima riga della macro (sotto la riga Sub Macro1 ()

  2. Esegui Macro2 come prima, iniziando troppo in alto sul foglio. Questa volta il la riga che hai digitato dice a Excel di ignorare la riga di codice che non può essere eseguita. Non ci sono messaggi di errore e la macro esce dopo aver fatto tutto il possibile. Usa questo metodo di gestione degli errori con cautela. Questa è una macro molto semplice. A una macro più complessa probabilmente non funzionerebbe come previsto se gli errori venissero semplicemente ignorati Inoltre, l’utente non ha idea che qualcosa sia andato storto.

  3. Modifica il codice di Macro2 per includere un gestore di errori più sofisticato così:

Sub Macro2 ()

On Error GoTo ErrorHandler ActiveCell.Offset (-5, -1) .Range (“A1”). Seleziona Exit Sub ErrorHandler:

MsgBox “Devi iniziare sotto la riga 5 “

End Sub 15. Questa volta all’utente viene presentata una finestra di dialogo quando qualcosa va storto. Se non ci sono errori la riga ExitSub fa terminare la macro dopo che ha svolto il suo lavoro – altrimenti l’utente vedrebbe il messaggio anche se non ci sono stati errori.

Miglioramento delle macro registrate Il modo migliore per apprendere le basi di VBA è registrare una macro e vedere come Excel scrive il proprio codice. Spesso, però, le macro registrate contengono molto più codice del necessario. I seguenti esercizi dimostrano come migliorare e semplificare il codice che è stato prodotto da una macro registrata.

Esercizio 2: Migliorare le macro registrate Questo esercizio mostra che quando vengono registrate le macro, spesso viene generato più codice del necessario. Dimostra l’uso dell’istruzione With per precisare il codice .

  1. Selezionare una cella o un blocco di celle.

  2. Avviare il registratore di macro e chiamare la macro FormatCells. L’impostazione Riferimenti relativi non sarà rilevante.

  3. Vai a Formato> Celle> Carattere e scegli Times New Roman e Red.

Vai a Pattern e scegli Giallo.

Vai ad Allineamento e scegli Orizzontale, Centro Vai a Numero e scegli Valuta.

  1. Fare clic su OK e arrestare il registratore.

  2. Fare clic sul pulsante Annulla (o Ctrl + Z) per annullare le modifiche al foglio di lavoro.

  3. Selezionare un blocco di celle ed eseguire la macro FormatCells. Nota che non può essere annullato! Digita le celle per controllare il risultato della formattazione.

  4. Guarda il codice:

Sub FormatSelection ()

Selection.NumberFormat = “$ , # 0.00″

Con selezione .H .FontStyle = “Regular”

Size = 10 .Strikethrough = False .Superscript = False .Subscript = False .OutlineFont = False .Shadow = False .Underline = xlUnderlineStyleNone .ColorIndex = 3 Termina con Selection.Interior .ColorIndex = 6 .Pattern = xlSolidInomatic = End With End Sub 8. Annotare tutte le istruzioni aggiuntive che sono state registrate. Elimina le righe di codice in modo che rimanga solo quanto segue:

Sub FormatSelection ()

Selection.NumberFormat = “$ , # 0.00″

With Selection .HorizontalAlignment = xlCenter End With With Selection.Font .Name = “Times New Roman”

ColorIndex = 3 End With With Selection.Interior .ColorIndex = 6 End With End Sub 9. Eseguire la macro per verificare il codice modificato. Funziona ancora come prima.
  1. Ora modifica ulteriormente il codice:

Sub FormatSelection ()

Con selezione .NumberFormat = “$ , # 0.00″

Font.ColorIndex = 3 .Interior.ColorIndex = 6 End With End Sub 11. Provare la macro. Tutto funziona ancora e il codice verrà eseguito molto più velocemente.
  1. Prova a registrare la stessa macro utilizzando i pulsanti della barra degli strumenti invece di andare alla finestra di dialogo:

Cambia il carattere in Times New Roman Cambia il colore del carattere in Rosso Cambia il colore di riempimento in Giallo Fai clic sul pulsante Centro Fai clic sul pulsante Currency 13. Guarda il codice. Hai ancora molte cose che non vuoi necessariamente. Excel sta registrando tutte le impostazioni default. La maggior parte di questi possono essere eliminati in sicurezza.

  1. Sperimenta con l’editing direttamente nel codice per cambiare i colori, il font, il formato del numero, ecc.

Esercizio 3: Guarda una macro in fase di registrazione Questo esercizio mostra che puoi imparare guardando la creazione della macro mentre viene registrata. È anche un esempio di quando a volte l’istruzione With non è appropriata .

  1. Aprire il file VBA01.xls.

Sebbene questo foglio di lavoro sia visivamente corretto e possa essere compreso dall’utente, la presenza di celle vuote può causare problemi. Prova a filtrare i dati e guarda cosa succede. Vai a Dati> Filtro> Filtro automatico e filtra per regione o mese. È chiaro che Excel non fa le stesse supposizioni dell’utente. Le celle vuote devono essere riempite.

  1. Affiancare le finestre Excel e VBE (verticalmente) in modo che siano una accanto all’altra.

  2. Selezionare una cella all’interno dei dati. Se è una cella vuota, deve essere adiacente a una cella contenente dati.

  3. Avviare il registratore di macro e chiamare la macro FillEmptyCells.

Impostare per registrare i riferimenti relativi.

  1. Nella finestra VBE trova e fai doppio clic sul modulo (Module1)

per la cartella di lavoro corrente per aprire il riquadro di modifica, quindi disattivare la finestra Esplora progetto e la finestra Proprietà (solo per creare spazio).

  1. Registra la nuova macro come segue:

Passaggio 1. Ctrl + * (per selezionare la regione corrente)

Passaggio 2. Modifica> Vai a> Speciale> Vuoti> OK (per selezionare tutte le celle vuote nella regione corrente)

Passaggio 3. Digita = [Freccia su] quindi premi Ctrl + Invio (per inserire la tua digitazione in tutte le celle selezionate)

Passaggio 4. Ctrl + * (per selezionare nuovamente la regione corrente)

Passaggio 5. Ctrl + C (per copiare la selezione – qualsiasi metodo andrà bene)

Passaggio 6. Modifica> Incolla speciale> Valori> OK (per incollare nuovamente i dati nello stesso posto ma scartando le formule)

Passaggio 7. Esc (per uscire dalla modalità di copia)

Passaggio 8. Interrompere la registrazione.

  1. Guarda il codice:

Sub FillEmptyCells ()

Selection.CurrentRegion.Select Selection.SpecialCells (xlCellTypeBlanks) .Select Selection.FormulaR1C1 = “= R [-1] C”

Selection.CurrentRegion.Select Selection.Copy Selection.PasteSpecial Incolla: = xlValues, Operation: = xlNone, SkipBlanks: = _ False, Transpose: = False Application.CutCopyMode = False End Sub 8. Nota l’uso di spazio e trattino basso “_” Per indicare la suddivisione di una singola riga di codice in una nuova riga. Senza questo Excel tratterebbe il codice come due istruzioni separate.

  1. Poiché questa macro è stata registrata con comandi ben congegnati, c’è poco codice non necessario. In Paste Special è possibile eliminare tutto ciò che segue la parola “xlValues”.

  2. Prova la macro. Quindi utilizzare lo strumento Filtro automatico e notare la differenza.