Come stampare in base a condizioni indicate nel foglio di lavoro

Claudio 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. Ad esempio, se A1 contiene 1, viene stampato Foglio1; se contiene 2, vengono stampati Foglio1 e Foglio2.

L’unico modo per farlo è utilizzare una macro ed è possibile utilizzare diversi approcci. Considera la seguente macro molto semplice, che utilizza semplicemente una struttura Select Case 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("Foglio1").PrintOut
            Case 2
                Sheets("Foglio2").PrintOut
            Case 3
                Sheets("Foglio1").PrintOut
                Sheets("Foglio2").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 stamperà cose diverse in base al valore. Se il valore è 1, viene stampato Foglio1; se è 2 viene stampato il Foglio2; e se è 3, vengono stampati sia Foglio1 che Foglio2. Se desideri che valori diversi stampino cose diverse, modifica semplicemente la struttura Select Case per riflettere i valori possibili e cosa dovrebbe essere stampato per ciascun 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 ciascun foglio di lavoro nella cartella di lavoro elencato nella prima colonna. Se inserisci un valore a destra del nome del 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   'Elimina questo foglio se esiste già
    Sheets("Foglio di controllo").Delete
    On Error GoTo 0

    Sheets.Add   'Aggiunge il foglio di controllo
    ActiveSheet.Name = "Foglio di controllo"

    Range("A1").Select   'Etichetta le colonne
    ActiveCell.FormulaR1C1 = "Nome Foglio"

    Range("B1").Select
    ActiveCell.FormulaR1C1 = "Stampare?"

    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 esistente. Quindi aggiunge un nuovo foglio di lavoro denominato “Foglio di controllo” e inserisce le etichette delle intestazioni nelle colonne A e B. Elenca quindi tutti i fogli di lavoro nella cartella di lavoro nella colonna A.

Una volta creato il foglio di controllo, puoi inserire una “X” o un altro valore (come “S” o 1) nella colonna B accanto a ciascun foglio di lavoro che desideri stampare. La macro seguente esamina quindi il foglio di controllo e stampa qualsiasi foglio di lavoro che presenta un segno (qualsiasi segno) nella cella della colonna B.

 

Sub PrintSelectedSheets()
    Dim i as Integer
    i = 2

    Do Until Sheets("Foglio di controllo").Cells(i, 1).Value = ""
        If Trim(Sheets("Foglio di controllo").Cells(i, 2).Value <> "") Then
            Sheets(Sheets("Foglio di controllo").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 da eseguire immediatamente prima della stampa (la stampa è uno degli eventi che Excel consente di intercettare). La seguente macro, aggiunta all’oggetto Questa_cartella_di_lavoro, 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:="Vuoi l'Anteprima di stampa?", _
          Buttons:=vbYesNoCancel, Title:="Anteprima?")
        Select Case iResponse
            Case vbYes
                bPreview = True
            Case vbNo
                bPreview = False
            Case Else
               Msgbox "Annullato su richiesta dell'utente"
               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 & "deve avere un numero tra " _
        & "1 e " & 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, a 1 stampa il primo foglio di lavoro, a 2 stampa il secondo, a 3 stampa il terzo e così via.

Se il valore in A1 non è un valore o se è inferiore a 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 rientri 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 l’anteprima di stampa per quel foglio di lavoro.

 

 

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

Ti è stato utile?