Stampa tutto o niente (Microsoft Excel)
Karen 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 o niente affatto: 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 vedere un’anteprima di stampa, viene attivato l’evento BeforePrint dell’oggetto Cartella di lavoro. È possibile creare la propria 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:="Do you want to Print Preview?", _ Buttons:=vbYesNoCancel, Title:="Preview?") 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 prima all’utente se desidera eseguire un’anteprima di stampa. Una struttura Seleziona caso viene utilizzata per impostare la variabile bPreview in base alla risposta alla domanda. L’impostazione di bPreview controlla quindi cosa accade.
Se l’utente ha fatto clic su Annulla quando viene richiesto di visualizzare l’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 uguale a bPreview (True significa che il foglio di lavoro è visualizzato in anteprima; False significa che è effettivamente stampato).
Notare 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.
Notare inoltre che una delle ultime cose che si verificano prima di uscire dalla macro è che la proprietà Cancel è impostata su True. Questo viene fatto in modo che la stampa originale o la richiesta di anteprima di stampa che ha generato l’evento BeforePrint venga annullata. Dopotutto, non è necessario completare quella richiesta, poiché la macro ha eseguito tutta la gestione della stampa per l’utente.
C’è un avvertimento, ovviamente, nell’utilizzo di questo approccio alla stampa: se le macro non sono abilitate, il gestore non verrà eseguito e l’utente può stampare come desiderato. (Tenere premuto Maiusc mentre si apre la cartella di lavoro disabilita le macro e all’utente viene chiesto più volte se desidera abilitare le macro.) Altri problemi di ExcelTips hanno discusso questo fatto.
_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 (11629) si applica a Microsoft Excel 2007, 2010, 2013 e 2016.
È possibile trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: Printing All or Nothing.