Come cambiare le intestazioni delle varie sezioni di una stampa

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 subtotali, è possibile specificare che Excel inizi ogni gruppo su una pagina nuova di zecca. Questo è molto utile per tutti i tipi di reporting in Excel.

Se inizi ogni gruppo o sezione del subtotale 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 le diverse sezioni in un documento di Word. Sfortunatamente, non c’è modo di farlo in Excel. È tuttavia possibile creare una macro che modifichi iterativamente l’intestazione e stampi ciascun gruppo di un foglio di lavoro. Consideriamo 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( _
        "Numero di copie", "Modifica delle intestazioni delle sezioni", 1)
    If iCopies = "" Then Exit Sub
    Set cFirst = Range("A1")     ' cella di avvio
    For r = 2 To rowLast    ' dalla prima riga all'ultima riga
        If ActiveSheet.Rows(r).PageBreak = xlPageBreakManual Then
            Set cLast = Cells(r - 1, colLast)
            Set rngSection = Range(cFirst, cLast)
            iSection = iSection + 1
            Select Case iSection
            '   sostituisce i dati dell'intestazione...
                Case 1: strCH = "Sezione 1"
                Case 2: strCH = "Sezione 2"
            '   ecc
            '   Case n: strCH = "Sezione n"
            End Select
            ActiveSheet.PageSetup.CenterHeader = strCH
            rngSection.PrintOut _
                Copies:=iCopies, Collate:=True
            Set cFirst = Cells(r, 1)
        End If
    Next r
'   Ultima Sezione ++++++++++++++++++++++++++++
    Set rngSection = Range(cFirst, c)
    iSection = iSection + 1
'   sostituisce le intestazioni...
    strCH = "Ultima Sezione..."
    ActiveSheet.PageSetup.CenterHeader = strCH
    rngSection.PrintOut _
        Copies:=iCopies, Collate:=True
End Sub

 

 

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

Il controllo effettivo della riga viene eseguito esaminando la proprietà PageBreak di ogni riga. Questa proprietà è normalmente impostata su xlPageBreakNone, ma quando si utilizza la funzionalità Subtotali di Excel, qualsiasi riga che presenta un’interruzione di pagina prima di essa avrà questa proprietà impostata su xlPageBreakManual. Questa è la stessa impostazione che si verificherebbe se inserisci manualmente le interruzioni di pagina nel tuo foglio di lavoro.

Se la macro rileva che una riga ha un’interruzione di pagina prima, l’intervallo rngSection viene impostato uguale alle righe del gruppo precedente. Inoltre, la struttura Select Case viene utilizzata per impostare le diverse intestazioni utilizzate per le diverse sezioni del foglio di lavoro. Questa intestazione viene quindi posizionata al centro dell’intestazione e viene stampato l’intervallo specificato da rngSection.

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

Per utilizzare questa macro è sufficiente specificare all’interno della struttura Select Case le diverse intestazioni che desideri per ciascuna sezione del foglio di lavoro. Se lo desideri, puoi anche modificare la posizione dell’intestazione. Tutto quello che devi fare è modificare la proprietà CenterHeader in LeftHeader o RightHeader. Se lo desideri, puoi anche utilizzare LeftFooter, CenterFooter e RightFooter.

 

 

Tags: , , , , , , , , , , , , , , , , , ,

Ti è stato utile?