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 Foglio2; e se è 3, vengono stampati sia Sheet1 che Sheet2. Se vuoi che valori diversi stampino cose diverse, modifica semplicemente la struttura Seleziona caso per riflettere i valori possibili e cosa dovrebbe 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 prima elimina 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.

(Questo è uno degli eventi, la stampa, che Excel consente di intercettare.) La macro seguente, aggiunta all’oggetto thisWorkbook, viene eseguita ogni volta che si tenta di stampare o si sceglie Anteprima di stampa.

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 (2372) si applica a Microsoft Excel 97, 2000, 2002 e 2003. Puoi trovare una versione di questo suggerimento per l’interfaccia a nastro di Excel (Excel 2007 e versioni successive) qui: