Stampare solo righe compilate

Anonimo
2021-06-25T06:09:50+00:00

Buongiorno,

di un determinato Foglio X, partendo dalla riga 4, vorrei poter stampare solo le righe compilate (range Colonna A: Colonna J) se la Colonna B è compilata. E' possibile?

Grazie in anticipo.

Microsoft 365 e Office | Excel | Per la casa | Windows

Domanda bloccata. Questa domanda è stata eseguita dalla community del supporto tecnico Microsoft. È possibile votare se è utile, ma non è possibile aggiungere commenti o risposte o seguire la domanda.

0 commenti Nessun commento
Risposta accettata dall'autore della domanda
Anonimo
2021-07-08T12:24:14+00:00

Ciao Claudio,

perdona il ritardo nella risposta. Grazie per il codice però quando l'ho provato sul mio file non ha funzionato. In ogni caso nel frattempo il foglio di lavoro è cambiato ti riporto il link

https://1drv.ms/x/s!ArB4q0DrhM2YpCyMfNafhltEmiH6

come vedi sono due "tabelle" (non sono settate come tabelle) sovrapposte. Quello che dovrei poter fare è stampare, oltre alle due intestazioni, solo le righe compilate (range colonne A:I).

Il codice non ha funzionato perché hai inserito la procedura Workbook_BeforePrint in un modulo di codice standard anziché nel modulo di codice Questa_cartella_di_Lavoro.

Correggendo questo, e inserendo alcuni dati nelle due tabelle, il codice funziona senza problemi.

E' possibile fare in modo che apra l'anteprima di stampa e non stampi direttamente?

Purtroppo non credo sia possibile nascondere le righe vuote nell'anteprima di stampa: l'anteprima di stampa visualizzerà le righe vuote ma queste righe non verranno stampate.

Potresti scaricare il mio file di prova Andrea20210708.xlsm

===

Regards,

Norman

La risposta è stata utile?

1 persona ha trovato utile questa risposta.
0 commenti Nessun commento

6 risposte aggiuntive

Ordina per: Più utili
  1. Anonimo
    2021-07-08T13:42:29+00:00

    Ciao Andrea,

    Sbagliavo io perché non avevo capito come funzionasse. Io non la trovavo nell'elenco delle altre macro...invece dovevo proprio andare in File, Stampa, ecc..

    Alla fine navigando in giro per la rete ho preso pezzi di varie macro e sono arrivato a questa.

    Che ne pensi? l'unica cosa è che se la seconda tabella è vuota me le stampa tutte. Ho trovato come escamotage di scrivere un qualcosa in una delle righe annerite (cosi non si vede). Funziona ma sicuramente ad un informatico farà accapponare la pelle :D

    Sub STAMPA1()

    Const sPassword As String = "psw"

    Worksheets("STATUS PRATICHE").Unprotect Password:=sPassword

    Riga = Cells(Selection.SpecialCells(11).Row + 1, 1).End(xlUp).Row

    For R = Riga To 1 Step -1

    If Cells(R, 1) = 0 Then Cells(R, 1).EntireRow.Hidden = True

    Next R

    ActiveWindow.SelectedSheets.PrintPreview

    Cells.EntireRow.Hidden = False

    Worksheets("STATUS PRATICHE").Protect Password:=sPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowFormattingRows:=True

    End Sub

    Il tuo codice funzionerà ma richiede che l'utente lo chiami. Al contrario, il mio codice funziona automaticamente ogni volta che viene richiamata l'istruzione di stampa.

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento
  2. Anonimo
    2021-07-08T13:33:19+00:00

    Grazie Norman.

    Sbagliavo io perché non avevo capito come funzionasse. Io non la trovavo nell'elenco delle altre macro...invece dovevo proprio andare in File, Stampa, ecc..

    Alla fine navigando in giro per la rete ho preso pezzi di varie macro e sono arrivato a questa.

    Che ne pensi? l'unica cosa è che se la seconda tabella è vuota me le stampa tutte. Ho trovato come escamotage di scrivere un qualcosa in una delle righe annerite (cosi non si vede). Funziona ma sicuramente ad un informatico farà accapponare la pelle :D

    Sub STAMPA1()

    Const sPassword As String = "psw"

    Worksheets("STATUS PRATICHE").Unprotect Password:=sPassword

    Riga = Cells(Selection.SpecialCells(11).Row + 1, 1).End(xlUp).Row

    For R = Riga To 1 Step -1

    If Cells(R, 1) = 0 Then Cells(R, 1).EntireRow.Hidden = True

    Next R

    ActiveWindow.SelectedSheets.PrintPreview

    Cells.EntireRow.Hidden = False

    Worksheets("STATUS PRATICHE").Protect Password:=sPassword, DrawingObjects:=True, Contents:=True, Scenarios:=True, AllowInsertingRows:=True, AllowSorting:=True, AllowFiltering:=True, AllowFormattingRows:=True

    End Sub

    La risposta è stata utile?

    0 commenti Nessun commento
  3. Anonimo
    2021-07-08T06:48:33+00:00

    Buongiorno Norman,

    perdona il ritardo nella risposta. Grazie per il codice però quando l'ho provato sul mio file non ha funzionato. In ogni caso nel frattempo il foglio di lavoro è cambiato ti riporto il link

    https://1drv.ms/x/s!ArB4q0DrhM2YpCyMfNafhltEmiH6

    come vedi sono due "tabelle" (non sono settate come tabelle) sovrapposte. Quello che dovrei poter fare è stampare, oltre alle due intestazioni, solo le righe compilate (range colonne A:I). E' possibile fare in modo che apra l'anteprima di stampa e non stampi direttamente?

    Grazie in anticipo

    La risposta è stata utile?

    0 commenti Nessun commento
  4. Anonimo
    2021-06-25T09:25:32+00:00

    Ciao Andrea,

    di un determinato Foglio X, partendo dalla riga 4, vorrei poter stampare solo le righe compilate (range Colonna A: Colonna J) se la Colonna B è compilata. E' possibile?

    Certo!

    Prova qualcosa del genere:

    • Alt+F11 per aprire l'editor di VBA
    • Alt+IM per inserire un nuovo modulo di codice
    • Nel nuovo modulo vuoto, incolla il seguente codice:

    '========>>

    Option Explicit

    Dim Rng As Range

    '-------->>

    Public Sub Nasconde_Righe(SH As Worksheet)

    Dim i As Long, LRow As Long 
    
    Const sColonne\_da\_Stampare As String = **"A:J"         '<<=== Modifica** 
    
    Const iPrima\_Riga As Long = **4                                    '<<=== Modifica** 
    
    With SH 
    
        LRow = LastRow(SH, .Columns("B")) 
    
        Set Rng = .Range(sColonne\_da\_Stampare).Resize(LRow - iPrima\_Riga + 1).Offset(iPrima\_Riga - 1) 
    
        .PageSetup.PrintArea = Rng.Address 
    
    End With 
    
    With Rng 
    
        For i = .Rows.Count To 1 Step -1 
    
            If .Cells(i, "B").Value = vbNullString Then 
    
                .Rows(i).EntireRow.Hidden = True 
    
            End If 
    
        Next i 
    
    End With 
    

    End Sub

    '-------->>

    Private Sub AfterPrint()

    Rng.EntireRow.Hidden = False 
    

    End Sub

    '--------->>

    Public Function LastRow(SH As Worksheet, _

    Optional Rng As Range, \_ 
    
    Optional minRow As Long = 1) 
    
    If Rng Is Nothing Then 
    
        Set Rng = SH.Cells 
    
    End If 
    
    On Error Resume Next 
    
    LastRow = Rng.Find(What:="\*", \_ 
    
        After:=Rng.Cells(1), \_ 
    
        Lookat:=xlPart, \_ 
    
        LookIn:=xlFormulas, \_ 
    
        SearchOrder:=xlByRows, \_ 
    
        SearchDirection:=xlPrevious, \_ 
    
        MatchCase:=False).Row 
    
    On Error GoTo 0 
    
    If LastRow < minRow Then 
    
        LastRow = minRow 
    
    End If 
    

    End Function

    '<<========

    • Ctrl+R per accedere alla finestra Project Explorer ('Gestione progetti')
    • Fai doppio clic sul modulo ThisWorkbook (Questa_cartella_di_Lavoro) del file e incolla il seguente codice:

    '========>>

    Option Explicit

    '-------->>

    Private Sub Workbook_BeforePrint(Cancel As Boolean)

    Const sFoglio As String = **"Foglio1"        '&lt;&lt;=== Modifica** 
    
    If ActiveSheet.Name = sFoglio Then 
    
        Call Nasconde\_Righe(ActiveSheet) 
    
    End If      
    
    Application.OnTime Now + TimeValue("00:00:01"), "AfterPrint" 
    

    End Sub

    '<<========

    • Alt+Q per chiudere l'editor di VBA e tornare a Excel.
    • Salva il file con l’estensione xlsm

    Potresti scaricare il mio file di prova Andrea20210625.xlsm

    ===

    Regards,

    Norman

    La risposta è stata utile?

    0 commenti Nessun commento