Franklin ha una macro che nasconde alcune righe in un foglio di lavoro e quindi stampa il foglio di lavoro. Per fare ciò utilizza il gestore di eventi BeforePrint. Il problema è che Franklin vuole mostrare automaticamente le righe al termine della stampa. Non sa come farlo all’interno della sua macro.

Ci sono alcuni modi in cui puoi affrontarlo. Uno consiste nell’usare il gestore di eventi BeforePrint e usarlo per nascondere le righe desiderate e quindi specificare una macro da eseguire tramite il metodo OnTime. Ecco come apparirebbe il gestore di eventi:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

' Code here to hide rows desired

Application.OnTime Now, "AfterPrint"

End Sub

Dovrai aggiungere a questo gestore di eventi il ​​codice per nascondere le righe che desideri nascondere. (Franklin ha detto che aveva un codice di questo tipo funzionante; stava avendo problemi con il suo scoprire dopo la stampa.) Notare che la macro chiamata tramite OnTime è una chiamata AfterPrint. Questa macro dovrebbe essere inserita in un modulo normale, non nello stesso modulo in cui sono posizionati i gestori di eventi. Può essere anche più semplice del gestore di eventi:

Sub AfterPrint()

' Code here to unhide rows     Cells.Select     Selection.EntireRow.Hidden = False End Sub

Potresti anche, se lo desideri, bypassare completamente la necessità del metodo OnTime (e della macro AfterPrint). Ciò implicherebbe questo approccio:

Private Sub Workbook_BeforePrint(Cancel As Boolean)

Cancel = True     ' Code here to hide rows desired

Application.EnableEvents = False     ActiveSheet.PrintOut     Application.EnableEvents = True

' Code here to unhide rows End Sub

La macro funziona perché annulla la stampa che ha attivato l’evento BeforePrint, nasconde le righe, stampa il foglio di lavoro attivo e quindi scopre le righe.

Lo svantaggio di qualsiasi approccio basato sul gestore di eventi è che limita ciò che l’utente può stampare. In altre parole, l’utente può stampare solo ciò che gli consenti di stampare, non ciò che desidera effettivamente stampare. Per aggirare questa limitazione piuttosto ampia, dovrai abbandonare completamente l’approccio BeforePrint. Invece, crea una macro regolare che gestisce la stampa:

Sub PrintWS()

' Code here to hide rows desired

Application.EnableEvents = False     ActiveSheet.PrintOut     Application.EnableEvents = True

' Code here to unhide rows End Sub

Noterai che questo è, essenzialmente, il cuore del secondo approccio BeforePrint: nascondi le righe, stampa il foglio di lavoro e poi scopri le righe. Questa macro PrintWS potrebbe quindi essere collegata a un tasto di scelta rapida o qualcosa sulla barra di accesso rapido in modo che possa essere chiamata facilmente.

A proposito, se decidi di utilizzare uno degli approcci di BeforePrint, sono stati segnalati casi in cui non funziona correttamente in tutte le versioni di Excel. (Questo sembra molto difficile da rintracciare.) Quello che succede è che in alcune versioni, ciò che viene stampato da Excel è “scolpito nella pietra” prima che venga richiamato il gestore di eventi BeforePrint. Ciò significa che tutte le righe nascoste all’interno del gestore eventi vengono ignorate quando il foglio di lavoro viene effettivamente stampato, quindi è come se non avessi mai nascosto le righe nella macro. L’unico modo per aggirare questo fatto molto frustrante è gestire la stampa da soli, direttamente, tramite il secondo esempio BeforePrint sopra o l’approccio macro PrintWS.

ExcelTips è la tua fonte di formazione economica su Microsoft Excel.

Questo suggerimento (13624) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.