Come stampare Tutto o Niente

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).

 

 

Tags: , , , , , , , , , ,

Ti è stato utile?