Creare/inserire una routine nel vba

Usare Excel è divenuta un lavoro sempre più comune, ma alle volte, nonostante ci impegnamo a cercare ed usare le sue funzioni, rimaniamo delusi perchè o non le troviamo o una certa funzione non lavora come vorremmo.

 

In queste circostanze possiamo ricorrere al VBA che la souite Office ci mette a disposizione assieme ai suoi prodotti.

In questa pagina vediamo come poter creare/inserire una routine nel vba.

Ma prima dobbiamo famigliarizzare con la nuova interfaccia, sconosciuta ai più.

Per andare in ambiente VBA possiamo seguire diversi metodi:

  1. ALT + F11
  2. Scegliere dal Menù Strumenti Macro ---> Visual Basic Editor
  3. Dalla Barra degli strumenti Visual Basic (se non è visibile: clic destro sulla barra degli strumenti di Excel scegliendo dal menù contestuale la barra Visual Basic) scegliere il pulsante Visual Basic Editor per essere trasferiti nell'editor VBA

Qui troviamo un ambiente che presto ci diverrà amico.

Sulla sinistra vediamo due finestre:

Nella parte centrale la finestra principale dell'editor VBA dove scrivere il nostro codice. Nella parte superiore due caselle da cui possiamo scegliere l'oggetto per cui scrivere il codice e, a destra la routine o l'evento in cui scrivere.

 

Possiamo notare subito che finestra Progetto VBAProject sono elencati tutti i fogli presenti nella cartella di Excel ed un oggetto ThisWorkbook, oltre ad eventuali altri Moduli, UserForm e moduli di classe.

Ognuno di questi elementi, se cliccati due volte Mostrano, nella finestra principale, il relativo Modulo

Per aggiungere nuovi moduli possiamo fare clic destro in questa finestra e andare alla voce Inserisci.
Da questa possiamo decidere se inserire una Userform, un Modulo, o un Modulo di classe.
Normalmente è in questi moduli che scriviamo i nostri codici.

Ma per il momento possiamo soprassedere su tutte queste cose.

Per iniziare a lavorare col VBA è bene fare la conoscenza col registratore di macro che ci viene offerto da Excel.
Perciò torniamo in Excel e creiamo la nostra prima Macro (o procedura) attivando il registratore di macro.

 

Ora vediamo come creare una nuova routine.

Il modo migliore per iniziare è quello di usare il registratore di macro come si vede in questa immagine arbitrariamente assemblata per mostrare tutte le fasi per non perderci in una giungla di immagini.

Per usare il registratore di macro:

  1. attivare il registratore
  2. nella finestra che ne consegue possiamo assegnare un nome alla macro o lasciare quella di default (macro1, macro2, ecc)
  3. fare clic sul pulsante OK
  4. iniziare a lavorare sul foglio senza curarci del registratore
  5. finite le operazioni chiudere il registratore premendo sul piccolo quadratino scuro presente su questa barra degli strumenti

Facciamo un paio di esempi.

Attivato il registratore di macro proviamo a cambiare il foglio selezionandone un altro.

Fatto questo chiudiamo il nostro registratore ed andiamo a vedere che cosa è successo nel VBA (se non è presente questa barra possiamo scegliere da menù: Strumenti --> Macro --> interrompi registrazione).

La prima volta che eseguiamo questa operazione noteremo che è stato inserito un nuovo Modulo generico.

In questo modulo troveremo una routine già scritta:

Sub Macro1()
'
' Macro1 Macro
' Macro registrata il 09/11/2007 da mike
'
'

Sheets("Foglio3").Select
End Sub

Proviamo a fare una cosa più complessa: colorare una cella e bordarla.

  1. Attiviamo il registratore di macro come abbiamo fatto sopra.
  2. Selezioniamo una cella o più celle
  3. Scegliamo dal menù contestuale del tasto destro del mouse "Formato celle"
  4. Nella finestra che ne consegue andiamo alla scheda Bordo
  5. Scegliamo i bordi che vogliamo
  6. Andiamo alla scheda Motivo
  7. Scegliamo il colore che vogliamo
  8. Clicchiamo sul pulsante OK
  9. Chiudiamo il registratore di macro
  10. Andiamo nel VBA

 

Qui troviamo queste istruzioni:

Sub Macro4()
'
' Macro4 Macro
' Macro registrata il 09/11/2007 da mike
'
'

Range("F6:H9").Select
Selection.Borders(xlDiagonalDown).LineStyle = xlNone
Selection.Borders(xlDiagonalUp).LineStyle = xlNone
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With

With Selection.Interior
.ColorIndex = 40
.Pattern = xlSolid
.PatternColorIndex = xlAutomatic
End With
End Sub

Molte di queste istruzioni sono chiaramente ridondanti per cui ci apprestiamo a ripulirle.

Dopo la pulizia avremo queste istruzioni residue che, da sole, nella maggior parte dei casi, possono bastare:

Sub Macro4()
Range("F6:H9").Select
With Selection.Borders
.Weight = xlMedium
End With
With Selection.Borders(xlInsideVertical)
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.Weight = xlThin
End With
With Selection.Interior
.ColorIndex = 40
End With
End Sub

Per continuare.

Il registratore di macro ci può insegnare molto.

Ma per affinare le nostre tecniche il registrastore di macro non è più sufficiente perchè occorre conoscere funzioni, proprietà e sintassi. Perciò occorre studiare e, quando serve, basta chiedere.