Visualizzazione dell’anteprima di stampa per la pagina corrente (Microsoft Excel)
Michelle ha un lungo foglio di lavoro con cui sta lavorando. Quando usa Anteprima di stampa per il foglio di lavoro, la pagina mostrata nella finestra di dialogo Anteprima di stampa è sempre la prima pagina. Michelle si chiede se esiste un modo per fare in modo che Anteprima di stampa mostri automaticamente la pagina del foglio di lavoro su cui sta lavorando.
Un modo per affrontare questo problema è provare a lavorare con le aree di stampa. Se selezioni l’area del foglio di lavoro su cui stai lavorando e quindi imposti l’area di stampa uguale alla tua selezione, quando visualizzi Anteprima di stampa, dovresti vedere solo quell’area di stampa.
Se questo non soddisfa il tuo desiderio, potresti pensare di poter ricorrere all’uso di una macro. Ecco un esempio di macro che potrebbe fare il trucco per te:
Sub PrintPreviewActivePage() Dim lActiveRow As Long Dim iActiveCol As Integer Dim iHPBs As Integer Dim iVPBs As Integer Dim lRow As Integer Dim iCol As Integer Dim iPage As Integer lActiveRow = ActiveCell.Row iActiveCol = ActiveCell.Column ActiveSheet.UsedRange If IsEmpty(ActiveCell.SpecialCells(xlCellTypeLastCell)) Then _ ActiveCell.SpecialCells(xlCellTypeLastCell).FormulaR1C1 = " " If lActiveRow > ActiveCell.SpecialCells(xlCellTypeLastCell).Row Or _ iActiveCol > ActiveCell.SpecialCells(xlCellTypeLastCell).Column Then _ Exit Sub With ActiveSheet iHPBs = .HPageBreaks.Count iVPBs = .VPageBreaks.Count lRow = 0 iCol = 0 If iHPBs > 0 Or iVPBs > 0 Then For lRow = iHPBs To 1 Step -1 If .HPageBreaks(lRow).Location.Row <= lActiveRow Then Exit For Next lRow For iCol = iVPBs To 1 Step -1 If .VPageBreaks(iCol).Location.Column <= iActiveCol Then Exit For Next iCol End If iPage = (lRow + 1) + (iCol * (iHPBs + 1)) .PrintOut From:=iPage, To:=iPage, Preview:=True MsgBox "Previewed page " & iPage End With If ActiveCell.SpecialCells(xlCellTypeLastCell).FormulaR1C1 = " " Then _ Selection.SpecialCells(xlCellTypeLastCell).ClearContents End Sub
Questa macro è in realtà una variazione su qualsiasi numero di macro che potresti trovare con qualche indagine su Internet. Ci sono due parti fondamentali: prima la macro capisce in quale “pagina” ci si trova nel foglio di lavoro, quindi utilizza il metodo .PrintOut con il parametro Preview impostato su True, con il risultato che viene richiamata l’anteprima di stampa.
In alcuni fogli di lavoro questa macro può funzionare alla grande, ma è piuttosto incostante se funzionerà o meno. Nella maggior parte dei miei test, non sono stato in grado di farlo funzionare, a meno che non usassi fogli di lavoro molto piccoli. (In altre parole, pochissime righe e colonne.) Se lo esegui su un foglio di lavoro di grandi dimensioni, vedrai subito che ottieni un errore “Indice fuori intervallo” nel ciclo che esamina i membri della raccolta .HPageBreaks. Il modo in cui ciò potrebbe accadere quando non si utilizza un membro che è fuori intervallo (lRow non varia mai al di fuori del valore restituito dalla proprietà .Count) è sconcertante.
Sembra essere un problema che Microsoft riconosce, però. In effetti, è un problema che hanno riconosciuto, ma mai risolto, da anni:
https://support.microsoft.com/en-us/help/210663/
La soluzione suggerita sulla pagina web, però, non funziona davvero. Quindi, siamo bloccati con una macro che funziona in modo affidabile solo su fogli di lavoro in cui non è necessario calcolare il numero di pagina perché si lavora solo con una singola pagina. Aargh!
La conclusione è che un approccio basato su macro potrebbe, nel prossimo futuro, non essere praticabile per le esigenze di Michelle. Questo ci lascia con l’approccio dell’area di stampa, descritto all’inizio di questo suggerimento.
_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 (13578) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 e Excel in Office 365.