Area di stampa



  • Area di stampa
    di alexps81 data: 10/03/2016 12:59:08

    Buongiorno a tutti gli esperti e soprattutto a coloro che in questi ultimi giorni mi hanno supportato e SOPPORTATO.
    Sto cercando di realizzare un registro per la gestione delle presenze giornaliere e dopo varie prove sto seguendo una linea costruttiva del registro così come si presenta in allegato.
    Adesso però mi sono bloccato su un problema legato all'area di stampa. Cioè nel foglio ELENCO NOMINATIVI inserisco la qualifica, il cognome e il nome di ciascun dipendente, mentre nel foglio TABELLE PRESENZE, in alto a destra, per ogni foglio, vengono trascritti proprio questi dati.
    Nel foglio TABELLE PRESENZE c'è un button "STAMPA PDF" che al suo click dovrebbe stampare il registro in PDF, andando ad allargare l'area di stampa in base a quanti nominativi sono presenti. Dunque, se ci sono 8 nominativi, l'area di stampa si deve allargare fino ad 8 tabelle.
    Tra i vari appunti in mio possesso, sono riuscito a mettere giù questo codice, ma chiaramente non funziona bene. C'è qualcuno che mi può aiutare a correggerlo? Ho capito che il problema è nel rigo LR = .Cells(.Rows.Count, "M").End(xlUp).Row, quindi nella colonna "M". Perché il codice cerca di allargare l'area di stampa fino a dove trova celle piene nella colonna "M", invece deve cercare solo la presenza o meno dei nominativi.

    Possibilmente vorrei inglobare oltre alle tabelle, anche il frontespizio del registro che si trova nel foglio FRONTESPIZIO.

    Grazie mille....
     
    Sub saveasPDF()
    Dim LR As Long
        Application.EnableEvents = False
        With Sheets("TABELLE PRESENZE")
            LR = .Cells(.Rows.Count, "M").End(xlUp).Row
            .PageSetup.PrintArea = "A1:U" & LR
            .ExportAsFixedFormat xlTypePDF, OpenAfterPublish:=True
        End With
        MsgBox "Elenco dei chiedenti visita salvato correttamente", vbInformation + vbOKOnly, "TABELLE PRESENZE"
        Application.EnableEvents = True
    End Sub
    



  • di Albatros54 data: 10/03/2016 14:28:44

    Ho modificato il tuo codice, provalo, crea tanti file pdf quanti sono i nominativi
    inseriti nelle schede. 
     
    Sub saveasPDF()
        Dim i As Integer
        Dim b As Integer
        Dim a As Integer
        Dim Nome As String
        Dim percorso As String
        On Error Resume Next
        percorso = "c:usersutentedesktopprova" <== da modificare
    
        Dim LR As Long
        Application.EnableEvents = False
        i = 1
        b = 2
        With Sheets("TABELLE PRESENZE")
    
            LR = .Cells(.Rows.Count, "M").End(xlUp).Row
            For a = 37 To LR Step 37
    
                Nome = .Range("n" & b)
                .PageSetup.PrintArea = ("A" & i & ":U" & a)
                .ExportAsFixedFormat xlTypePDF, Filename:=percorso & Nome & ".pdf"  ,OpenAfterPublish:=True
                i = i + 37
                b = b + 37
            Next
        End With
        MsgBox "Elenco dei chiedenti visita salvato correttamente", vbInformation + vbOKOnly, "TABELLE PRESENZE"
        Application.EnableEvents = True
    End Sub
    






  • di alexps81 data: 11/03/2016 08:27:19

    Ciao Albatros54, grazie per l'interessamento. Ho provato il tuo codice, molto bello ma non è proprio quello che cerco. Purtroppo le mie limitate capacità non mi consentono di modificarlo come vorrei.
    In pratica al click su SALVA PDF si deve creare solo un file in pdf con all'interno tanti fogli quanti sono i nominativi inseriti, in più se si riesce mi servirebbe che il primo foglio in pdf si il frontespizio, cioè quello che appare nel foglio di Excel denominato FRONTESPIZIO.
    Dunque per intenderci, vorrei che si creasse un file con all'interno uno dietro l'altro tutti i fogli, tanti quanti sono i nominativi inseriti. Un po' come fa il codice postato da me, solo che il mio va ad allargare l'area di stampa in base all'ultima cella piena presente nella colonna "M". Invece l'area di stampa si deve fermare all'ultimo nominativo inserito.

    Grazie...



  • di Albatros54 data: 11/03/2016 10:24:03

    la soluzione postata da me ,ti permette di stampare un modulo per ogni dipendente, mentre se guardi la tua soluzione nel creare un unico file non ti stampa un modulo su ogni foglio, ma bensi ti sfalsa l'area di stampa.





  • di alexps81 data: 11/03/2016 10:29:44

    Si si infatti, è proprio quello che voglio. Solo che il mio, se noti bene, allarga l'aerea di stampa non in modo corretto. Cioè dovrebbe allargarsi fin dove sono presenti i nominativi inseriti, invece così com'è scritta, l'area di stampa si allarga fin quando trova celle piene nella colonna "M".



  • di Albatros54 data: 11/03/2016 11:33:32

    Prova questo codice, devi rimodulare l'area di stampa
     
    Sub saveasPDF()
        Application.EnableEvents = False
        On Error Resume Next
        b = 2
       
        With Sheets("TABELLE PRESENZE")
     
        nome = .Range("n" & b)
      While nome <> ""
      nome = .Range("n" & b)
      b = b + 37
            'LR =   '.Cells(.Rows.Count, "M").End(xlUp).Row
          Wend
         b = b - 39
            .PageSetup.PrintArea = "A1:U" & b
            .ExportAsFixedFormat xlTypePDF, OpenAfterPublish:=True
        
        End With
        
        
        MsgBox "Elenco dei chiedenti visita salvato correttamente", vbInformation + vbOKOnly, "TABELLE PRESENZE"
        Application.EnableEvents = True
    End Sub
    






  • di alexps81 data: 11/03/2016 12:00:04

    Perfetto, era proprio quello che cercavo. Grazie mille
    Se non ti è di disturbo posso chiederti 2 cose:

    - Mi potresti fare una breve spiegazione del codice? Cosa avviene rigo per rigo, così inizio ad imparare qualcosa anch'io.

    - Per inglobare anche il foglio FRONTESPIZIO, come faccio? Ho notato che l'area di stampa si allarga andando a lavorare in "With Sheets("TABELLE PRESENZE")". Quindi come posso fare per inserire anche il foglio FRONTESPIZIO?

    Cmq ci tenevo a ringraziarti per la tua disponibilità e la tua preparazione.



  • di Albatros54 data: 11/03/2016 12:14:30

    nome = .Range("n" & b) << === Assegno alla variabile Nome il valore della cella, nel nostro caso "n2"

    While nome <> "" << ===Entro in un Loop è dico"Fintanto che la variabile nome non è vuota fai tutto quello che segue

    nome = .Range("n" & b) << ===controllo la variabile , è vuota , NO!!! perche contiene il un nome

    b = b + 37 <<< ===Incrementa la variabile b di 37

    Wend <<< ===ricomincia a controllare la variabile nome da While, quando la variabile è vuota salta alla riga sotto, e completa il codice

    b = b - 39

    Spero tanto di essere stato chiaro.





  • di alexps81 data: 11/03/2016 12:19:34

    Grazie...si diciamo che ho capito, il problema è che purtroppo mi manca la fantasia, cioè non saprei da dove incominciare per poter programmare, nonostante sappia cosa vorrei fare.
    Invece per inserire in quest'area di stampa anche il FRONTESPIZIO? Come faccio?



  • di Albatros54 data: 11/03/2016 13:17:03

    Secondo me, l'unica cosa che potresti fare, è quella di inserire nel foglio"Tabella Presenze", una nuova area di stampa con il frontespizio,aspettando qualche altra idea.





  • di alexps81 (utente non iscritto) data: 11/03/2016 13:29:20

    Ok. Grazie. Se mai hai qualche idea al riguardo sarò lieto di ricevere tue notizie.