David sta amministrando un’elezione per una società professionale e l’elenco degli elettori idonei è un foglio di lavoro. Ci sono circa 1.200 elettori idonei, quindi la stampa è lunga più di venti pagine. David ha un piè di pagina con il numero di pagina, il che è utile, ma sarebbe fantastico se potesse avere, nell’intestazione di ogni pagina, il nome sulla pagina e il cognome sulla pagina.

In Excel non esiste un modo nativo per farlo. Tuttavia, è uno scatto relativo da fare in Word, quindi una soluzione è incollare i nomi ordinati in un documento di Word e quindi aggiungere l’intestazione desiderata che mostra i nomi.

Anche se questo può funzionare, diventa un problema assicurarsi che la versione di Word dell’elenco sia sempre sincronizzata con la versione di Excel dell’elenco e viceversa.

Se decidi di mantenere un’unica versione dell’elenco dei votanti in Excel, il modo migliore per affrontare il problema è utilizzare una macro per inserire il nome e il cognome nell’intestazione. Il codice di una tale macro, ovviamente, dovrebbe essere adattato al layout dei dati nel foglio di lavoro. La macro seguente presuppone che i nomi siano nelle colonne dalla A alla C, con i cognomi (quelli che si desidera utilizzare per le intestazioni) nella colonna C.

Sub PrintNamesInHeader()

Dim iPages As Integer     Dim iPage As Integer     Dim iHorPgs As Integer     Dim iHP As Integer     Dim iHPNext As Integer     Dim iCol As Integer     Dim iColLast As Integer     Dim lRow As Long     Dim lRowLast As Long     Dim sPrtArea As String

iCol = 1        'Col A     iColLast = 3    'Col C     With ActiveSheet         iPages = ExecuteExcel4Macro("Get.Document(50)")

iHorPgs = .HPageBreaks.Count + 1         sPrtArea = .PageSetup.PrintArea

For iPage = 1 To iPages             iHP = ((iPage - 1) Mod iHorPgs)

iHPNext = iHP + 1             If iHP = 0 Then                 If sPrtArea = "" Then                     lRow = 1                 Else                     lRow = .Range(sPrtArea).Cells(1).Row                 End If             Else                 lRow = .HPageBreaks(iHP).Location.Row             End If             If iHPNext > .HPageBreaks.Count Then                 lRowLast = .Cells(lRow, iColLast).End(xlDown).Row             Else                 lRowLast = .HPageBreaks(iHPNext).Location.Row - 1             End If             .PageSetup.LeftHeader = .Cells(lRow, iCol).Value & _               " - " & .Cells(lRowLast, iColLast)

.PrintOut From:=iPage, To:=iPage, preview:=True         Next     End With End Sub

Quando si esegue la macro, passa attraverso ogni pagina del foglio di lavoro. Le intestazioni vengono impostate per la pagina, quindi viene stampata la singola pagina e quindi viene esaminata ed elaborata la pagina successiva.

_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 (9542) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: