Con questa macro puoi comandare la stampa delle sole pagine che hanno dei nominativi inseriti:
- Codice: Seleziona tutto
Sub PrPRArea()
Dim myNom, I As Long, cPag As Long, Beg As Long
Beg = 1
For I = 1 To 10
myNom = Application.Match("Nominativo", Cells(myNom + 1, "B").Resize(100, 1), False)
If IsError(myNom) Then Exit For
If Len(Cells(Beg + myNom, "B")) > 2 Then
cPag = cPag + 1
Beg = Beg + myNom
Else
Exit For
End If
Next I
Range("L1") = cPag
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=cPag, Copies:=1, _
Collate:=True, IgnorePrintAreas:=False
End Sub
Per mia semplificazione la macro inserisce in L1 il numero di pagine da stampare, in modo che puoi modificare i contenuti di G2, G52 etc con una formula come questa:
- Codice: Seleziona tutto
="foglio 1 di "&L1
In tal modo le scritte si adatteranno alla stampa.
L'individuazione delle pagine da stampare e' fatta esaminando la cella sottostante l'intestazione "Nominativo"; questo presuppone che le scritte compaiano subito dopo l'intestazione, senza righe vuote.
Il numero di pagine non e' limitato a 3, visto che la macro cerca fino alla "Ultima intestazione" disponibile.
La macro stampa sulla stampante di default; se vuoi inserire la scelta della stampante, aggiungi in testa
- Codice: Seleziona tutto
'scegli printer
SelPrint = Application.Dialogs(xlDialogPrinterSetup).Show
If SelPrint = False Then
MsgBox "Stampa Cancellata"
Exit Sub
End If
Volendo forzare l'uso esclusivamente della macro per stampare quel foglio, potresti aggiungere, nel Modulo QuestaCartellaDiLavoro:
- Codice: Seleziona tutto
Private Sub Workbook_BeforePrint(Cancel As Boolean)
If Sheets.Name = "Report" Then
Call PrPRArea
Cancel = True
End If
End Sub
Ciao