Cristina sta cercando un modo per stampare un’intera cartella di lavoro, anche se un utente sceglie di stampare un singolo foglio di lavoro. In altre parole, sta cercando un modo per stampare l’intera cartella di lavoro oppure niente: non dovrebbero esserci opzioni “intermedie”.
L’unico modo per gestirlo è attraverso l’uso di una macro. VBA consente di creare macro che vengono avviate quando si verificano determinati eventi. Uno degli eventi che possono attivare le macro è l’evento “print”. Quando qualcuno chiede di stampare o sceglie di visualizzare un’anteprima di stampa, viene attivato l’evento BeforePrint dell’oggetto Workbook. Puoi creare la tua macro che viene eseguita quando viene attivato l’evento.
Private Sub Workbook_BeforePrint(Cancel As Boolean)
Dim sht As Variant
Dim bPreview As Boolean
Dim iResponse As Integer
On Error GoTo ErrHandler
iResponse = MsgBox(prompt:="Vuoi l'Anteprima di stampa?", _
Buttons:=vbYesNoCancel, Title:="Anteprima?")
Select Case iResponse
Case vbYes
bPreview = True
Case vbNo
bPreview = False
Case Else
GoTo ExitHandler
End Select
Application.EnableEvents = False
For Each sht In Sheets
If sht.Visible Then
sht.PrintOut Preview:=bPreview
End If
Next
ExitHandler:
Application.EnableEvents = True
Cancel = True
Exit Sub
ErrHandler:
MsgBox Err.Description
Resume ExitHandler
End Sub
Ogni volta che Excel è pronto per la stampa o ogni volta che viene richiamata l’anteprima di stampa, viene attivato l’evento BeforePrint e viene eseguita questa macro. La macro chiede innanzitutto all’utente se desidera eseguire un’anteprima di stampa. Una struttura Select Case viene utilizzata per impostare la variabile bPreview in base alla risposta alla domanda. L’impostazione di bPreview controlla quindi cosa succede.
Se l’utente ha fatto clic su Annulla quando gli è stato chiesto dell’anteprima, la macro viene chiusa e la stampa viene annullata. In caso contrario, ogni foglio di lavoro nella cartella di lavoro viene esaminato per la stampa o l’anteprima. Se il foglio di lavoro è visibile, viene stampato e la proprietà Preview è impostata su bPreview (True significa che viene visualizzata l’anteprima del foglio di lavoro; False significa che viene effettivamente stampato).
Si noti che la macro imposta la proprietà EnableEvents su False. Questo viene fatto in modo che nessun altro evento possa attivarsi durante la stampa o l’anteprima. Se EnableEvents viene lasciato “attivo”, ogni volta che viene utilizzato il metodo PrintOut, l’intero evento BeforePrint viene nuovamente attivato: l’utente finirebbe in un ciclo infinito se la gestione degli eventi non fosse disattivata.
Inoltre, tieni presente che una delle ultime cose che si verificano prima di uscire dalla macro è che la proprietà Cancel è impostata su True. Ciò viene fatto in modo che la richiesta di stampa o di anteprima di stampa originale che ha generato l’evento BeforePrint venga annullata. Dopotutto, non è necessario completare tale richiesta, poiché la macro si occupa di tutta la gestione della stampa per l’utente.
C’è ovviamente un avvertimento nell’usare questo approccio alla stampa: se le macro non sono abilitate, il gestore non verrà eseguito e l’utente potrà stampare come desidera (tenendo premuto Maiusc durante l’apertura della cartella di lavoro si disabilitano le macro e la maggior parte delle volte all’utente viene chiesto se desidera abilitare le macro).