Menu

Excel Macro: Ripetere macro registrata ma su range diversi

19 Luglio 2016 - Excel macro

Capita alle volte di registrare una macro per compiere una serie di azioni ripetitive automaticamente magari con una semplice pressione di due tasti. Alle volte però potrebbe essere necessario rendere il range, dove la macro va applicata, dinamico e selezionabile di volta in volta. Se pensiamo di voler formattare un’area selezionata con un verde oliva, bordi interni sottili su tutte le celle ed un bordo più spesso esterno e vogliamo che questa formattazione venga applicata tramite una macro ad un’area che noi selezioniamo di volta in volta basta procedere in questo modo.

Iniziamo col registrare una macro che compia tutte queste azioni di formattazione, dal menù visualizza premiamo il pulsante Macro e quindi Registra macro.

 

Screenshot at 2016-07-19 22:24:04

Ora siccome avevo gia fatto un’altra macro questa me la chiama Macro2, imposto il tasto di scelta rapida in modo da poter lanciare la macro semplicemente premendo CTLR +q

Screenshot at 2016-07-19 22:24:32

Una volta dato invio procediamo con tutti cambiamenti di formattazione che vogliamo applicare tramite macro. Scegliamo il colore

Screenshot at 2016-07-19 22:25:11

Tutti i bordi per avere bordi su tutte le celle

Screenshot at 2016-07-19 22:25:21

E Bordo casella spesso per avere il bordo esterno più marcato

Screenshot at 2016-07-19 22:25:31

Questo è il risultato finale

Screenshot at 2016-07-19 22:25:37

Ora possiamo interrompere la macro sempre dal menù Visualizza, Macro, Interrompi registrazione.

Screenshot at 2016-07-19 22:25:52

Ora premiamo ALT+F11 per andare all’editor di visual basic e selezioniamo il Modulo1 che contiene la nostra Macro2. La prima riga definisce il nome della macro ed eventuali parametri da passare alla macro che di solito si mettono all’interno delle parentesi dopo il nome. Le righe verdi sono dei commenti perchè preceduti dall’apostrofo ( ‘ ) quindi vengono ignorati dal programma, la prima istruzione è proprio il range che abbiamo selezionato nella fase di registrazione.

Screenshot at 2016-07-19 22:26:14

Cancelliamo la riga del range o se la vogliamo conservare ci mettiamo davanti un’apostrofo.

Per rendere la macro flessibile ci viene in contro il Metodo Application.Inputbox. Usiamo un oggetto MioRange che farà da contenitore per la selezione del range tramite Application.Inputbox, dopo la parentesi mettiamo un label che sarebbe un’aiuto per chi utilizzerà la macro in fututo in modo ricordare cosa si sta aspettando excel. Tutti gli altri parametri di Application.Inputbox non sono necessari ma dobbiamo specificare ad Application.Inputbox che introdurremo un Range che è l’ottavo parametro di questo metodo. Il primo parametro è il label mettiamo una serie 7 virgole e all’ottavo parametro mettiamo 8 per definire chè il valore passato alla funzione sarà un range.

Se volevamo passare una formula avremmo messo zero

0=Formula

1=Numero

2=Testo

4=Boleano (true,False)

8=Range

16=errore

32=Array di valori

Dopo aver definito il range tramite Set MioRange = Application.InputBox(“Selezionare Range”, , , , , , , 8) dobbiamo dire ad excel di selezionare tale range tramite MioRange.Select

Una volta fatto questo la macro è pronta.

Screenshot at 2016-07-19 22:26:58

 

Ora basta premere CTRL+q per fare apparire un form per l’inserimento del range. Ora non ci resta che selezionare nel foglio il range desiderato e premere il tasto OK nel form

Screenshot at 2016-07-19 22:27:27

Screenshot at 2016-07-19 22:27:32

E ripeterlo a volontà ….

Screenshot at 2016-07-19 22:27:59

Screenshot at 2016-07-19 22:28:05

 

Sub Macro2()
'
' Macro2 Macro
'
' Scelta rapida da tastiera: CTRL+q
'
    'Range("D6:F11").Select
    
    Set MioRange = Application.InputBox("Selezionare Range", , , , , , , 8)
    MioRange.Select
    
    With Selection.Interior
        .Pattern = xlSolid
        .PatternColorIndex = xlAutomatic
        .ThemeColor = xlThemeColorAccent3
        .TintAndShade = 0.599993896298105
        .PatternTintAndShade = 0
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Selection.Borders(xlDiagonalDown).LineStyle = xlNone
    Selection.Borders(xlDiagonalUp).LineStyle = xlNone
    With Selection.Borders(xlEdgeLeft)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeTop)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeBottom)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlEdgeRight)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlMedium
    End With
    With Selection.Borders(xlInsideVertical)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    With Selection.Borders(xlInsideHorizontal)
        .LineStyle = xlContinuous
        .ColorIndex = 0
        .TintAndShade = 0
        .Weight = xlThin
    End With
    Range("F15").Select
End Sub

Lascia un commento