area di stanmpa variabile



  • area di stanmpa variabile
    di nichicanta data: 11/07/2013 16:41:24

    un saluto a tutti gli amici del forum, ho la necessità di stampare (un'area di stampa che contienne dati variabili). Ho impostato questo codice con un'are di stampa predefinita (ovviamente è molto piu' grande di quello che serve, per avere la certezza che non vengano stampati dati in meno).
    C'è la possibilità di stampare solo la parte di area di stampa che contiene i dati (poichè questi cambiano di dimensiuone ogni volta) e non parti che poi vengono stampati senza dati.
    P.S. riepilogo:
    stampa di solo dati, con intestazioni di colonna da ripetere su ogni foglio da stampare.
    Saluti e buona giornata a tutti.
     
    Sub stampa()
    X = InputBox("Quante copie vuoi stampare?")
    If X = "" Then
    Exit Sub
    Else
     With ActiveSheet.PageSetup
            .PrintTitleRows = "$1:$1"
            .PrintTitleColumns = ""
        End With
    ActiveSheet.PageSetup.PrintArea = "$b$1:$i$5000"    " qui dovrebbe esserci un codice che prende come stampa un'area che contenga solo ed esclusivamente dati
    ActiveWindow.SelectedSheets.PrintOut Copies:=X
    Application.Wait Now + TimeValue("00:00:5")
    End If
    End Sub



  • di Vecchio Frac data: 11/07/2013 19:19:04

    Del foglio in esame, calcola la colonna più a destra che contiene un dato, e quindi calcola la riga più in basso che contiene un dato.
    Quindi imposti l'area di stampa a tale range.
    Il metodo più semplice per raggiungere l'ultima cella valorizzata di un range rettangolare valorizzato sfrutta la tecnica della specialcell xlCellTypeLastCell:
    activesheet.cells.specialcells(xlCellTypeLastCell).address
    restituisce l'indirizzo della cella più in basso e più a destra del range che contiene tutti i valori del foglio in questione.






  • di nichicanta (utente non iscritto) data: 12/07/2013 08:50:59

    Caro V.F. ho fatto delle prove con il codice che tu mi hai indicato ma mi compare il seguente messaggio di errore.
    Errore di Run Time '438':
    Proprietà o metodo non supportato dall'oggetto.
    Mi sai dire perchè?
    Ti saluto e ti auguro buon lavoro.
     
    Sub stampa()
    X = InputBox("Quante copie vuoi stampare?")
    If X = "" Then
    Exit Sub
    Else
     With ActiveSheet.PageSetup
            .PrintTitleRows = "$1:$1"
            .PrintTitleColumns = ""
        End With
    ActiveSheet.PageSetup.PrintArea = "$b$1:$i$5000" 'cosi si stampa un'area di stampa predefinita
    ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
    'ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Activate
    ActiveWindow.SelectedSheets.PrintOut Copies:=X
    Application.Wait Now + TimeValue("00:00:5")
    End If
    End Sub



  • di paolomath data: 12/07/2013 10:03:33

    Ciao, prova così:
     
    Sub stampa()
    
    X = InputBox("Quante copie vuoi stampare?")
    If X = "" Then
    Exit Sub
    Else
     With ActiveSheet.PageSetup
            .PrintTitleRows = "$1:$1"
            .PrintTitleColumns = ""
            .PrintArea = "$b$1:" & ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
    End With
    
    ActiveWindow.SelectedSheets.PrintOut Copies:=X
    Application.Wait Now + TimeValue("00:00:5")
    End If
    End Sub



  • di HarryBosch data: 12/07/2013 10:09:19

    Non ti funziona perché l'area di stampa rimane sempre quella:
    ActiveSheet.PageSetup.PrintArea = "$b$1:$i$5000"
    e non utilizzi l'indicazione che ti ha indicato VecchioFrac.

    Tale istruzione deve infatti essere valorizzata e quindi assegnata all'area di stampa:
    ActiveSheet.PageSetup.PrintArea = "$b$1:" & ultima_cella_foglio

    Vedi la revisione sotto
     
    Sub stampa()
        Dim X, ultima As Variant
    
        'ultima cella in basso a destra
        ultima = ActiveSheet.Cells.SpecialCells(xlCellTypeLastCell).Address
    
        X = InputBox("Quante copie vuoi stampare?")
        If X = "" Then Exit Sub
    
        With ActiveSheet.PageSetup
            .PrintTitleRows = "$1:$1"
            .PrintTitleColumns = ""
            'imposto l'area di stampa dalla cella che mi interessa all'ultima del foglio:
            .PrintArea = "$B$1:" & ultima
        End With
    
        ActiveWindow.SelectedSheets.PrintOut Copies:=X
        Application.Wait Now + TimeValue("00:00:5")
    
    End Sub
    



  • di HarryBosch data: 12/07/2013 10:11:35

    Oh, Paolomath mi aveva già anticipato ^_^

    E molto bene anche, visto che già aveva suggerito la strada giusta per proseguire...
    Bene!



  • di nichicanta (utente non iscritto) data: 12/07/2013 11:53:16

    Grazie e buona giornata a tutti Voi.
    un infinito e molto sentito ringraziamento per tutto il vostro aiuto e impegno.