macro per stampe



  • macro per stampe
    di re.king (utente non iscritto) data: 11/04/2014 11:52:30

    Buongiorno ragazzi.
    Necessito di vostro prezioso aiuto per la creazione di una macro che mi permetta di lanciare delle stampe senza dover adattare le dimensioni delle colonne foglio per foglio
    Mi spiego meglio: ho un file di database costituito da 15 colonne (nome agente, cod. cliente. nome cliente..etc) per un totale di oltre 4.000 righe.
    Ho quindi creato una pivot dove cliccando sul nome dell'agente (oltre 150 agenti) si apre il suo foglio di lavoro.
    Il problema è che devo adattare il foglio di lavoro al foglio di stampa (A3) agente x agente.
    L'aiuto che vi chiedo è proprio qui...Non posso perdere ore per adattare ogni foglio di lavoro alle dimensioni del foglio di stampa...
    VI PREGO AIUTATEMI!!!

    Vi ringrazio di vero cuore



  • di Lucas87 data: 11/04/2014 12:05:21

    Ciao
    cit "devo adattare il foglio di lavoro al foglio di stampa (A3)"
    Intendi modificare le impostazioni di stampa mettendo formato A3 e spuntando "Adatta a: 1 pag. di largh. per 1 di alt."?



  • di re.king data: 11/04/2014 12:20:05

    si però laddove il foglio di lavoro di un agente ha parecchie righe (molti clienti...) si deve generare un secondo - terzo foglio di stampa se no rischieremo di leggere delle righe piccolissime...grazie ancora



  • di Lucas87 data: 11/04/2014 12:41:44

    Ok
    Questo imposta il foglio A3, adatta il contenuto alla pagina in modo da avere 1 pagina in larghezza, mentre in altezza, 32767 è il massimo che si può impostare. In questo modo stampa tutti i fogli mantenendo una sola pagina in larghezza.
    Adesso resta da capire come è impostato il tuo file e estendere l'impostazione a tutti i fogli degli agenti.
    Es se i fogli degli agenti vanno dal terzo all'ultimo
    si può usare
    for i=3 to sheets.count
    .
    .
    next
     
    Sub stampa()
    With ActiveSheet.PageSetup
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 32767
        .PaperSize = xlPaperA3
    End With
    End Sub



  • di re.king (utente non iscritto) data: 11/04/2014 13:41:44

    Caro Luca,
    Ringraziandoti per l'attenzione che mi stai dedicando, i fogli di lavoro si generano di volta in volta che dalla pivot clicco sul nome dell'agente, quindi dal primo all' ultimo agente...spero di aver ben compreso la tua domanda. Ringraziandoti ancora aspetto una tua nuova risposta e la macro .
    Ancora grazie



  • di Lucas87 data: 11/04/2014 14:03:52

    Prova a vedere se questo è sufficiente
    Va inserito in ThisWorkbook
    Quando, cliccando sul nome, viene creato il nuovo foglio dovrebbe impostarlo come ho descritto prima.
     
    Private Sub Workbook_NewSheet(ByVal Sh As Object)
    With Sh.PageSetup
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 32767
        .PaperSize = xlPaperA3
    End With
    End Sub
    



  • di re.king (utente non iscritto) data: 11/04/2014 14:20:17

    No purtroppo...mi continua a dare un foglio di stampa A4...



  • di Lucas87 data: 11/04/2014 14:37:43

    Il problema credo dipenda dal fatto che le azioni della pivot, come quelle delle formule, non vengono riconosciute come eventi...
    Un altro tentativo si può fare cambiando il tipo di evento.
    Prova con:
    Workbook_SheetPivotTableUpdate
    Workbook_SheetActivate
    Workbook_SheetCalculate
    o con qualche altro presente nella lista.



  • di re.king (utente non iscritto) data: 11/04/2014 14:51:02

    Luca, scusa ma come si cambia un tipo di evento?
    Oltre ThisWorkbook non visualizzo altro....



  • di Lucas87 data: 11/04/2014 15:00:15

    Dove hai incollato il codice, in alto a destra ci sono 2 menù a tendina.
    In quello a dx c'è l'elenco degli eventi legati al workbook.
    Subito trovi scritto NewSheet.
    Selezionandone uno viene creata una routine con l'evento corrispondente.
    In pratica ti basta sostituire la prima riga (private sub .....) con quello che ti propone



  • di re.king (utente non iscritto) data: 11/04/2014 16:06:37

    Caro Luca, sembra funzionare ho dimenticato di dirti però che la stampa deve essere leggibile (foglio A3) in orizzontale e non in verticale...grazie ancora per la tua infinita disponibilità.
    Un sincero e caro abbraccio



  • di Lucas87 data: 11/04/2014 16:22:39

    Con quale evento viene avviata la macro?

    Per orientare il foglio aggiungi il codice sotto tra le istruzione che hai già.
    Un suggerimento:
    Per arrivare a ottenere le istruzioni di questo genere è molto utile il registratore di macro (io ho usato quello).
    Avvii la registrazione, fai l'operazione che ti interessa, fermi la registrazione. Tra le varie istruzioni che vengono restituite c'è anche quella richiesta.
     
    .Orientation = xlLandscape



  • di re.king (utente non iscritto) data: 11/04/2014 17:17:03

    Grazie Luca.
    Ho seguito il tuo consiglio ed ho attivato il registratore macro.
    Molto utile.
    Grazie sempre tante per la tua grande disponibilità e cortesia.