Le cartelle di lavoro possono contenere tutti i tipi di dati. Se hai una cartella di lavoro che include più fogli di lavoro, ciascuno contenente solo una piccola quantità di dati, potresti chiederti se esista un modo per stampare più fogli di lavoro su un singolo foglio di carta.
Esistono un paio di modi in cui puoi affrontare una soluzione a questo problema. Il primo consiste semplicemente nello stampare più pagine per foglio, utilizzando le funzionalità del driver della stampante. Ad esempio, il driver della mia stampante mi consente di specificare il numero di pagine da stampare per ogni foglio di carta. Se volessi stampare tre o quattro fogli di lavoro di una sola pagina tutti su un unico foglio di carta, tutto quello che devo fare è seguire questi passaggi:
- Premi Ctrl+P. Excel visualizza la finestra di dialogo Stampa (Excel 2007) o le opzioni di stampa (Excel 2010 o versioni successive).
- Se utilizzi Excel 2007, scegli l’opzione Intera cartella di lavoro nella finestra di dialogo. Se utilizzi una versione successiva di Excel, utilizza l’elenco a discesa immediatamente sotto l’intestazione Impostazioni per scegliere Stampa intera cartella di lavoro.
- Fai clic sul pulsante Proprietà (Excel 2007) o sul collegamento Proprietà stampante (versioni successive di Excel). Excel visualizza la finestra di dialogo Proprietà della stampante, con la scheda Layout selezionata.
- Imposta il controllo Pagine per foglio su 4.
- Fai clic su OK per chiudere la finestra di dialogo Proprietà.
- Fai clic su OK per stampare effettivamente i fogli di lavoro.
Non tutti i driver della stampante avranno questa funzionalità, ma il tuo potrebbe. Non lo saprai, però, a meno che non esplori la finestra di dialogo Proprietà della stampante per trovare quella funzionalità. Naturalmente, la stampa in questo modo può comportare la presenza di testo molto piccolo sulla stampa, poiché il driver della stampante riduce semplicemente ciascuna pagina per occupare un’area proporzionata della pagina stampata. Se desideri ridurre parte dello spazio bianco e quindi aumentare la dimensione del testo stampato, devi cercare una soluzione diversa.
Molte persone, per consolidare ciò che viene stampato, creano addirittura un “foglio di lavoro per la stampa” che non contiene altro che riferimenti alle aree da stampare sugli altri fogli di lavoro della cartella di lavoro. Questi riferimenti possono essere eseguiti tramite formule che fanno riferimento ai dati su ciascun foglio di lavoro o utilizzando lo strumento Immagine fotografica di Excel.
Per una soluzione automatizzata che consente di unire più fogli di lavoro in un unico foglio di lavoro, è possibile utilizzare una macro. La seguente macro creerà un nuovo foglio di lavoro alla fine della cartella di lavoro e vi copierà il contenuto di tutti gli altri fogli di lavoro.
Sub PrintOnePage()
Const WS_NAME = "...stampa", NOW_FMT = "dd/mm/yyyy hh:mm:ss", NOW_FMT_IT = "gg/mm/aaaa hh:mm:ss"
Const MARGIN = 0.5
Dim oWF As WorksheetFunction, rUsed() As Range, xWidth As Double
Dim nCount As Integer, n As Integer
Dim nRows As Integer, i As Integer
On Error Resume Next
Worksheets(WS_NAME).Activate
If Err = 0 Then
Application.DisplayAlerts = False
Worksheets(WS_NAME).Delete
Application.DisplayAlerts = True
End If
On Error GoTo 0
Set oWF = Application.WorksheetFunction
nCount = Worksheets.Count
ReDim rUsed(1 To nCount)
For n = 1 To nCount
With Worksheets(n)
If .Visible = xlSheetVisible And oWF.CountA(.UsedRange) > 0 Then
Set rUsed(n) = .UsedRange
End If
End With
Next n
With Worksheets.Add(After:=Sheets(Sheets.Count))
.Name = WS_NAME
.Cells(1, 1).Value = "Intervallo utilizzato al " & oWF.Text(Now(), NOW_FMT)
.Cells(2, 1).Formula = "=""Valori di cella al ""& TEXT(NOW(),""" _
& NOW_FMT_IT & """)"
.Cells(3, 1).Activate
With .Columns(1)
.Font.Name = "Courier New": .Font.Bold = True: .AutoFit
End With
ActiveWindow.DisplayGridlines = False
For n = 1 To nCount
If Not (rUsed(n) Is Nothing) Then
ActiveCell.Value = rUsed(n).Parent.Name
ActiveCell.Offset(1).Activate
rUsed(n).Copy
With .Pictures.Paste(Link:=True)
nRows = 1 + (.Height \ 409)
For i = 1 To nRows
ActiveCell.Offset(i - 1).RowHeight = .Height / nRows
Next i
If xWidth < .Width Then xWidth = .Width
End With
ActiveCell.Offset(nRows).Activate
End If
Next n
.Cells(1, 1).Activate
With ActiveCell
If .Width < xWidth Then
For n = 1 To 3
.ColumnWidth = xWidth * .ColumnWidth / .Width
Next n
End If
End With
With .PageSetup
n = Application.InchesToPoints(MARGIN)
.TopMargin = n: .BottomMargin = n
.LeftMargin = n: .RightMargin = n
.Zoom = False: .FitToPagesWide = 1: .FitToPagesTall = 1
End With
End With
Application.CutCopyMode = False
ActiveSheet.PrintPreview True
'Stampa il numero di copie desiderato
i = InputBox("Quante copie vuoi stampare?", "Excel Academy - Area Premium", 1)
If IsNumeric(i) Then
If i > 0 Then
ActiveSheet.PrintOut Copies:=i
End If
End If
'Elimina foglio temporaneo?
If MsgBox("Eliminare il foglio di lavoro temporaneo?", _
vbYesNo, "Excel Academy - Area Premium") = vbYes Then
Application.DisplayAlerts = False
Worksheets(WS_NAME).Delete
Application.DisplayAlerts = True
End If
End Sub
Il risultato è simile all’utilizzo dello strumento Immagine fotografica menzionato nel suggerimento.
Dopo aver messo insieme il foglio di lavoro combinato, la macro visualizza il foglio di lavoro utilizzando Anteprima di stampa. Quando chiudi Anteprima di stampa, ti viene chiesto quante copie del foglio di lavoro desideri stampare. Se si immette un numero maggiore di zero, verranno stampate altrettante copie. Infine, la macro si offre di eliminare il foglio di lavoro combinato appena prima di terminare.