Stampa condizionale (Microsoft Excel)
Kirk ha chiesto se esiste un modo per controllare in modo condizionale ciò che viene stampato in Excel. Ad esempio, la cella A1 contiene un valore e il valore controlla esattamente ciò che viene stampato. Forse se A1 contiene 1, allora viene stampato Sheet1; se contiene 2, vengono stampati Foglio1 e Foglio2.
L’unico modo per farlo è con una macro e ci sono diversi approcci che puoi usare. Considera la seguente macro molto semplice, che utilizza semplicemente una struttura Seleziona caso per controllare la stampa.
Sub PrintStuff() Dim vShts As Variant vShts = Sheets(1).Range("A1") If Not IsNumeric(vShts) Then Exit Sub Else Select Case vShts Case 1 Sheets("Sheet1").PrintOut Case 2 Sheets("Sheet2").PrintOut Case 3 Sheets("Sheet1").PrintOut Sheets("Sheet2").PrintOut End Select End If End Sub
Esegui questa macro con il valore 1, 2 o 3 nella cella A1 del primo foglio e la macro stampa elementi diversi in base al valore. Se il valore è 1, viene stampato Sheet1; se è 2, viene stampato Sheet2; e se è 3, vengono stampati sia Sheet1 che Sheet2. Se si desidera che valori diversi stampino cose diverse, è sufficiente modificare la struttura Seleziona caso per riflettere i valori possibili e cosa deve essere stampato per ogni valore.
È anche possibile creare un approccio più completo. Considera l’idea di aggiungere un “foglio di controllo” alla tua cartella di lavoro. Questo foglio avrà il nome di ogni foglio di lavoro nella cartella di lavoro elencato nella prima colonna. Se inserisci un valore a destra del nome di un foglio di lavoro, nella seconda colonna, una macro stamperà il foglio di lavoro corrispondente.
La seguente macro può essere utilizzata per creare il “foglio di controllo”.
Sub CreateControlSheet() Dim i as integer On Error Resume Next 'Delete this sheet if it already exists Sheets("Control Sheet").Delete On Error GoTo 0 Sheets.Add 'Add the WhatToPrint Sheet ActiveSheet.Name = "Control Sheet" Range("A1").Select 'Label the columns ActiveCell.FormulaR1C1 = "Sheet Name" Range("B1").Select ActiveCell.FormulaR1C1 = "Print?" Cells.Select Selection.Columns.AutoFit For i = 1 To ActiveWorkbook.Sheets.Count Cells(i + 1, 1).Value = Sheets(i).Name Next End Sub
La macro elimina prima qualsiasi vecchio foglio di controllo, se esiste. Quindi aggiunge un nuovo foglio di lavoro denominato Foglio di controllo e inserisce le etichette delle intestazioni nelle colonne A e B. Quindi elenca tutti i fogli di lavoro nella cartella di lavoro nella colonna A.
Con il foglio di controllo creato, puoi quindi inserire una “X” o un altro valore (come “Y” o 1) nella colonna B accanto a ogni foglio di lavoro che desideri stampare. La macro seguente esamina quindi il foglio di controllo e stampa qualsiasi foglio di lavoro che abbia un segno, qualsiasi segno, nella cella della colonna B.
Sub PrintSelectedSheets() Dim i as Integer i = 2 Do Until Sheets("Control Sheet").Cells(i, 1).Value = "" If Trim(Sheets("Control Sheet").Cells(i, 2).Value <> "") Then Sheets(Sheets("Control Sheet").Cells(i, 1).Value).Select ActiveWindow.SelectedSheets.PrintOut Copies:=1 End If i = i + 1 Loop End Sub
Un altro approccio consiste nel creare una macro che venga eseguita appena prima della stampa.
(La stampa è uno degli eventi che Excel consente di intercettare.) La macro seguente, aggiunta all’oggetto thisWorkbook, viene eseguita ogni volta che si tenta di stampare.
Private Sub Workbook_BeforePrint(Cancel As Boolean) Dim vShts As Variant Dim iResponse As Integer Dim bPreview As Boolean On Error GoTo ErrHandler vShts = Sheets(1).Range("A1") If Not IsNumeric(vShts) Then GoTo InValidEntry ElseIf vShts < 1 Or vShts > Sheets.Count Then GoTo InValidEntry Else iResponse = MsgBox(prompt:="Do you want Print Preview?", _ Buttons:=vbYesNoCancel, Title:="Preview?") Select Case iResponse Case vbYes bPreview = True Case vbNo bPreview = False Case Else Msgbox "Canceled at User request" GoTo ExitHandler End Select Application.EnableEvents = False Sheets(vShts).PrintOut Preview:=bPreview End If ExitHandler: Application.EnableEvents = True Cancel = True Exit Sub InValidEntry: MsgBox "'" & Sheets(1).Name & "'!A1" _ & vbCrLf & "must have a number between " _ & "1 and " & Sheets.Count & vbCrLf GoTo ExitHandler ErrHandler: MsgBox Err.Description Resume ExitHandler End Sub
La macro controlla il valore nella cella A1 del primo foglio di lavoro. Utilizza questo valore per determinare quali fogli di lavoro devono essere stampati. In altre parole, un 1 stampa il primo foglio di lavoro, un 2 stampa il secondo, un 3 stampa il terzo e così via.
Se il valore in A1 non è un valore o se è minore di 1 o maggiore del numero di fogli di lavoro nella cartella di lavoro, l’utente viene informato che il valore non è corretto e la macro viene chiusa.
Supponendo che il valore in A1 sia compreso nell’intervallo, la macro chiede se si desidera utilizzare l’anteprima di stampa. A seconda della risposta dell’utente, la macro stampa il foglio di lavoro specificato o visualizza Anteprima di stampa per quel foglio di lavoro.
_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 (13108) si applica a Microsoft Excel 2007, 2010, 2013, 2016, 2019 ed Excel in Office 365. Puoi trovare una versione di questo suggerimento per la vecchia interfaccia del menu di Excel qui: