Quando si lavora con fogli di lavoro di grandi dimensioni, non è insolito aggiungere subtotali in modo da poter raggruppare le informazioni nel foglio di lavoro in modo logico. (Lo strumento Subtotale si trova nella scheda Dati della barra multifunzione nel gruppo Struttura.) Quando si aggiungono i subtotali, è possibile specificare che Excel inizi ogni gruppo su una pagina nuova di zecca. Questo è molto utile per tutti i tipi di report in Excel.

Se inizi ogni sezione di gruppo o di totale parziale su una nuova pagina, potresti chiederti se esiste un modo per creare intestazioni personalizzate che vengono stampate in modo diverso per ciascuna sezione, in modo simile a quello che puoi fare con sezioni diverse in un documento di Word. Sfortunatamente, non è possibile eseguire questa operazione in Excel. È tuttavia possibile creare una macro che modifica in modo iterativo l’intestazione e stampa ogni gruppo di un foglio di lavoro. Considera la seguente macro:

Sub ChangeSectionHeads()

Dim c As Range, rngSection As Range     Dim cFirst As Range, cLast As Range     Dim rowLast As Long, colLast As Integer     Dim r As Long, iSection As Integer     Dim iCopies As Variant     Dim strCH As String

Set c = Range("A1").SpecialCells(xlCellTypeLastCell)

rowLast = c.Row     colLast = c.Column

iCopies = InputBox( _         "Number of Copies", "Changing Section Headers", 1)



If iCopies = "" Then Exit Sub

Set cFirst = Range("A1")     ' initialization start cell     For r = 2 To rowLast    ' from first row to last row         If ActiveSheet.Rows(r).PageBreak = xlPageBreakManual Then             Set cLast = Cells(r - 1, colLast)

Set rngSection = Range(cFirst, cLast)



iSection = iSection + 1             Select Case iSection             '   substitute your CenterSection Header data ...

Case 1: strCH = "Section 1"

Case 2: strCH = "Section 2"

'   etc             '   Case n: strCH = "Section n"

End Select

ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _                 Copies:=iCopies, Collate:=True

Set cFirst = Cells(r, 1)

End If     Next r

'   Last Section +++++++++++++++++++++++++++



Set rngSection = Range(cFirst, c)



iSection = iSection + 1 '   substitute your Center Header data ...

strCH = "Last Section ..."



ActiveSheet.PageSetup.CenterHeader = strCH

rngSection.PrintOut _         Copies:=iCopies, Collate:=True End Sub

Questa macro è un buon inizio per realizzare ciò che vuoi fare. Inizia chiedendoti quante copie vuoi stampare di ogni sezione, quindi inizia a scorrere ogni riga per vedere se c’è un’interruzione di pagina prima di quella riga.

Il controllo effettivo delle righe viene eseguito esaminando la proprietà PageBreak di ciascuna riga. Questa proprietà è normalmente impostata su xlPageBreakNone, ma quando si utilizza la funzionalità Subtotals di Excel, qualsiasi riga che ha un’interruzione di pagina prima che abbia questa proprietà impostata su xlPageBreakManual. Questa è la stessa impostazione che si verificherebbe se si inserissero manualmente le interruzioni di pagina nel foglio di lavoro.

Se la macro rileva che una riga ha un’interruzione di pagina prima di essa, l’intervallo rngSection viene impostato uguale alle righe nel gruppo precedente. Inoltre, la struttura Seleziona caso viene utilizzata per impostare le diverse intestazioni utilizzate per le diverse sezioni del foglio di lavoro. Questa intestazione viene quindi collocata nella posizione centrale dell’intestazione e viene stampato l’intervallo specificato da rngSection.

Dopo aver esaminato tutti i gruppi nel foglio di lavoro, viene stampato il gruppo finale (che non termina con un’interruzione di pagina).

Per utilizzare questa macro, tutto ciò che devi fare è specificare all’interno della struttura Seleziona caso le diverse intestazioni desiderate per ogni sezione del foglio di lavoro. È inoltre possibile, se lo si desidera, modificare la posizione dell’intestazione nell’intestazione. Tutto quello che devi fare è modificare la proprietà CenterHeader in LeftHeader o RightHeader. Puoi anche usare LeftFooter, CenterFooter e RightFooter, se lo desideri.

_Nota: _

Se desideri sapere come utilizzare le macro descritte in questa pagina (o in qualsiasi altra pagina dei siti ExcelTips), ho preparato una pagina speciale che include informazioni utili.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (9867) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.