› Sviluppare funzionalita su Microsoft Office con VBA › Formattare una serie di fogli
-
AutoreArticoli
-
Buongiorno a tutti
premetto che sono alle prime armi con le macro e avrei gentilmente bisogno di una dritta...
Dovrei formattare nello stesso modo una serie di fogli esistenti e già contenenti dati.
A titolo esemplificativo allego un paio di file (ovviamente ridotti rispetto all'originale e privi di dati sensibili).
Mi trovo in una situazione analoga a quella del file 2, e la formattazione la devo applicare a tutti i fogli (eccetto al primo). Ogni foglio ha già un proprio nome assegnato... e questa è la cosa che mi complica la vita!!!
Tra i vari tentativi che ho fatto, sono riuscito a raggiungere l'obiettivo con un file analogo, ma con i fogli numerati (da 2 a 6), come vedete nella macro contenuta nel file 1.
Chiedo se sia possibile fare la stessa operazione, ma passando come argomento della variabile il testo contenente il titolo dell'etichetta del foglio anzichè un numero progressivo.
Riporto anche il codice della macro e vi ringrazio anticipatamente per i preziosissimi consigli che riuscirete a darmi.
Ghido
Sub Macro1() ' ' Macro1 Macro ' Dim Righe As Integer Dim Foglio As Worksheet Dim NrFogli As Integer Dim i As Integer NrFogli = 5 For i = 2 To NrFogli + 1 Set Foglio = Sheets(i) Foglio.Select Righe = Range("A" & Rows.Count).End(xlUp).Row Range("A1:A" & Righe).Select Selection.Borders(xlEdgeLeft).LineStyle = xlContinuous Selection.Borders(xlEdgeTop).LineStyle = xlContinuous Selection.Borders(xlEdgeBottom).LineStyle = xlContinuous Selection.Borders(xlEdgeRight).LineStyle = xlContinuous Selection.Borders(xlInsideVertical).LineStyle = xlContinuous Selection.Borders(xlInsideHorizontal).LineStyle = xlContinuous Next End SubAllegati:
You must be logged in to view attached files.Presumendo che tu voglia escludere dalla formattazione il foglio "MATRICE ORIGINE" ed evitando tutti quei Select suggerisco una modifica così:
Option Explicit Sub Macro1() Dim Righe As Integer Dim Foglio As Worksheet Dim i As Integer For i = 1 To Sheets.Count 'conto i fogli presenti Set Foglio = Sheets(i) If Not Sheets(i).Name = "MATRICE ORIGINE" Then 'escludo questo With Foglio Righe = .Range("A" & Rows.Count).End(xlUp).Row With .Range("A1:A" & Righe) .Borders(xlEdgeLeft).LineStyle = xlContinuous .Borders(xlEdgeTop).LineStyle = xlContinuous .Borders(xlEdgeBottom).LineStyle = xlContinuous .Borders(xlEdgeRight).LineStyle = xlContinuous .Borders(xlInsideVertical).LineStyle = xlContinuous .Borders(xlInsideHorizontal).LineStyle = xlContinuous End With End With End If Next End SubMentre mi rileggo la tua accurata descrizione ed esamino i file allegati, ti informo che puoi semplificare un pochino il codice accorpando istruzioni, inoltre spesso non c'è necessità di pre-selezionare un range per formattarlo. La proprietà Borders contiene già tutti i bordi in se stessa senza bisogno di precisarli a meno che non si debba applicare una formattazione precisa ad uno solo di essi.
Il tuo codice diventa:
Sub Macro1() ' ' Macro1 Macro ' Dim Righe As Integer Dim NrFogli As Integer Dim i As Integer NrFogli = 5 For i = 2 To NrFogli + 1 With Sheets(i) Righe = .Range("A" & Rows.Count).End(xlUp).Row .Range("A1:A" & Righe).Borders.LineStyle = xlContinuous End With Next End SubIf Not Sheets(i).Name = "MATRICE ORIGINE" Then 'escludo questo
Alla fine Rollis mi ha preceduto 🙂
Aggiungo solo di stare attenti ai confronti secchi come questo perché in caso di mescolanza di maiuscole/minuscole il confronto fallisce.
Io preferisco utilizzare StrComp con il parametro vbTextCompare, che permette un confronto case insensitive.Io preferisco utilizzare StrComp con il parametro vbTextCompare, che permette un confronto case insensitive.
Eh, ma questo significa non aver fiducia negli utilizzatori; e poi, ci vuole sempre un po' di strizza quando poi qualcosa non funziona più
.ma questo significa non aver fiducia negli utilizzatori
io soprattutto non mi fido di me stesso
-
AutoreArticoli
