Stampa fogli su unico PDF



  • Stampa fogli su unico PDF
    di sabotto (utente non iscritto) data: 13/10/2014 16:44:47

    Voglio stampare un determinato intervallo fisso di celle per ognuno dei fogli di una cartella Excel, usando la stampante virtuale PDFCreator per ottenere un unico file che poi stamperei successivamente. Per fare cio ho scritto il seguente codice che funziona ma mi crea un file PDF per ogni foglio mentre io vorrei un unico file PDF con piu pagine, una per ogni foglio excel.
    In effetti dovrei inserire una specie di "NewPage" (che non mi pare esista).
    Suggerimenti?
     
    With ActiveSheet.PageSetup  'adesso si impostano le proprietà di PageSetup
    
        .PrintErrors = xlPrintErrorsDisplayed  'consente la visualizzazione di errori di stampa
        .BlackAndWhite = True
        .Draft = False 'per stampare anche i grafici: con false non li stampa
    
        For Indice = 1 To 16
            
            Set F = Worksheets("A" & Format$(Indice, "00"))
            F.Range("A2:D21").PrintOut , ActivePrinter:="PDFCreator"
               
        Next Indice 
    
    End With
    
    MsgBox "Creazione File PDF dei Fogli A4 , eseguita ", vbInformation



  • di lepat (utente non iscritto) data: 13/10/2014 18:06:15

    Io uso questa senza passare da pdfcreator
     
    Sub exportToPdfsomeSheetsTo1pdf() ' tutti i fogli in un unico documento
    'Sheets(Array("Foglio1", "Foglio2")).Select
    Sheets.Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
        "C:Users
    omeutenteDesktopNewBook.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    Sheets(1).Select
    End Sub



  • di Zer0Kelvin data: 13/10/2014 18:49:56

    Ciao.
    Non so se esista una maniera semplice per farlo con PdfCreator.
    Penso ti convenga usare un foglio d'appoggio su cui copiare tutte le pagine da stampare.
    Dopo puoi, come suggerito da Patel, utilizzare ExportAsFixedFormat.



  • di sabotto (utente non iscritto) data: 13/10/2014 19:43:51

    La soluzione di lepat puo andare bene se fosse possibile (non so se si e come) selezionare solo un intervallo (range) da ogni foglio e non tutto il contenuto di ognuno di essi perchè in ognuno dei fogli c'è tanta altra roba che a me non serve.
    E' possibile?



  • di Zer0Kelvin data: 13/10/2014 22:36:16

    Sì, é possibile.
    Da ogni foglio si prende il range che ti interessa e lo si va a copiare in un foglio d'appoggio, sotto si va a copiare lo stesso range del foglio successivo e così via per tutti e 16 i fogli.
    Alla fine si utilizza
    FoglioAppoggio.ExportAsFixedFormat
    per creare il pdf.
    Unico problema è l'impaginazione, credo che tu voglia un foglio in ogni pagina di stampa, giusto?
    Se tu potessi allegare un file Excel di esempio sarebbe molto più semplice per noi risolvere.



  • di sabotto (utente non iscritto) data: 14/10/2014 00:09:34

    Eccolo! (STAMPA PDF)
    Ho lasciato 3 fogli. Vorrei un PDF formato da 3 pagine . Su ogni pagina vorrei avere l'intervallo A2:D19 di ognuno dei 3 fogli , ma senza avere i colori nè le sfumature di grigio delle celle, infatti nella mia routine inniziale di esempio questo lo ottenevo con le istruzioni :
    With ActiveSheet.PageSetup

    .BlackAndWhite = True.
    .....
    Grazie



  • di lepat (utente non iscritto) data: 14/10/2014 08:16:26

    prova questa
     
    Sub b()
    strPdfName = "C:Users
    omeutenteDesktop	est.pdf" ' <<< da modificare
    Set tempSheet = Worksheets.Add(Before:=Sheets(1))
    With Sheets(1)
      .Columns("A:A").ColumnWidth = 30
      .Columns("B:B").ColumnWidth = 30
      .Columns("C:C").ColumnWidth = 8
      .Columns("D:D").ColumnWidth = 8
      LR = 1
      For i = 2 To Sheets.Count
        Sheets(i).Range("A2:D19").Copy .Range("A" & LR)
        LR = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .HPageBreaks.Add Before:=.Range("A" & LR)
      Next
      With .UsedRange.Interior
        .PatternColorIndex = 36
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
      End With
      
      .ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPdfName, _
        Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
        OpenAfterPublish:=False
      Application.DisplayAlerts = False
      .Delete
      Application.DisplayAlerts = True
    End With
    End Sub



  • di sabotto (utente non iscritto) data: 14/10/2014 09:22:37

    ottengo l'errore di run time 5: chiamata di routine o argomento non valido sulla riga :

    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPdfName, _
    Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

    (tra l'altro non capisco perchè non mi funziona l'intellisense)



  • di lepat (utente non iscritto) data: 14/10/2014 09:31:48

    forse sul 2007 non esiste la funzione ExportAsFixedFormat, prova allora con

     
    Sub b()
    strPdfName = "C:Users
    omeutenteDesktop	est.pdf" ' <<< da modificare
    Set tempSheet = Worksheets.Add(Before:=Sheets(1))
    With Sheets(1)
      .Columns("A:A").ColumnWidth = 30
      .Columns("B:B").ColumnWidth = 30
      .Columns("C:C").ColumnWidth = 8
      .Columns("D:D").ColumnWidth = 8
      LR = 1
      For i = 2 To Sheets.Count
        Sheets(i).Range("A2:D19").Copy .Range("A" & LR)
        LR = .Cells(.Rows.Count, "A").End(xlUp).Row + 1
        .HPageBreaks.Add Before:=.Range("A" & LR)
      Next
      With .UsedRange.Interior
        .PatternColorIndex = 36
        .ThemeColor = xlThemeColorDark1
        .TintAndShade = 0
        .PatternTintAndShade = 0
      End With
      .PrintOut , ActivePrinter:="PDFCreator"
      Application.DisplayAlerts = False
      .Delete
      Application.DisplayAlerts = True
    End With
    End Sub



  • di Zer0Kelvin data: 14/10/2014 13:24:03

    Ciao.
    CIT.:
    forse sul 2007 non esiste la funzione ExportAsFixedFormat
    _______________________________________________
    Guida di riferimento per sviluppatori di Excel
    Worksheet.ExportAsFixedFormat, metodo
    Esporta in un file nel formato specificato.
    Informazioni sulla versione
    Versione aggiunta: Excel 2007
    _______________________________________________

    L'errore, molto probabilnente, è dovuto ad un valore errato nella variabile strPdfName.



  • di sabotto (utente non iscritto) data: 14/10/2014 14:26:48

    Visto che come dice zeroKelvin l'istruzione esiste in Excel 2007 vorrei insistere

    Per cui ho fatto la seguente prova: di questa istruzione

    .ExportAsFixedFormat Type:=xlTypePDF, Filename:=strPdfName, _
    Quality:=xlQualityStandard, IncludeDocProperties:=False, IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

    ho provato a lasciare solo Type:=xlTypePDF che è obbligatorio senza gli altri parametri che sono opzionali, ma da lo stesso errore

    La variabile strPDFname è formata da
    strPdfName = Application.ActiveWorkbook.Path & " est.pdf"

    e risulta quindi essere valorizzata come "C:Documents and SettingsAntonioDesktop est.pdf"


    L'unica cosa positiva è che adesso ho l'intellisense perchè ho cambiato l'istruzione
    Set tempSheet = Worksheets.Add(Before:=Sheets(1))
    With Sheets(1)

    con

    Set tempSheet = Worksheets.Add(Before:=Sheets(1))
    With tempSheet





  • di lepat (utente non iscritto) data: 14/10/2014 16:17:58

    se il path è sbagliato si ottiene l'errore 1004



  • di sabotto (utente non iscritto) data: 14/10/2014 18:05:58

    Infatti. Comunque ho precedentemente allegato il file excel. A voi funziona l'istruzione?



  • di Rita (utente non iscritto) data: 15/10/2014 08:31:42

    Scusate l'intromissione
    Premesso che la soluzione proposta da Lepat mi funziona benissimo avrei solo una domanda
    e' possibile creare il pdf includendo solo un certo numero di fogli e non tutti quelli presenti nel file

     
    Sub exportToPdfsomeSheetsTo1pdf() ' tutti i fogli in un unico documento
    'Sheets(Array("Foglio1", "Foglio2")).Select
    Sheets.Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, FileName:= _
        "C:Users
    omeutenteDesktopNewBook.pdf", Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
        True
    Sheets(1).Select
    End Sub 
    



  • di lepat (utente non iscritto) data: 15/10/2014 08:39:53

    Si Rita, basta togliere l'apice alla seconda riga ed eliminare la terza

     
    Sub exportToPdfsomeSheetsTo1pdf()
    Sheets(Array("Foglio1", "Foglio2")).Select ' aggiungi i fogli che vuoi stampare
    ......



  • di sabotto (utente non iscritto) data: 15/10/2014 11:13:33

    scusate se insito ma ribadisco la mia richiesta: il codice di lepat con il mio file di prova vi funziona? Non vi da l'errore che invece da a me?
    Grazie



  • di Rita (utente non iscritto) data: 15/10/2014 11:44:06

    Grazie Lepat - perfect



  • di lepat (utente non iscritto) data: 15/10/2014 12:12:37

    Sabotto, il file allegato non contiene macro



  • di sabotto (utente non iscritto) data: 15/10/2014 15:03:19

    Lo so. Intendevo dire: se tu copi il tuo codice, quello che mi hai suggerito nel mio file (crei tu la macro), che a me da errore, a te funziona? Mi serve per capire se è un problema del mio pc (che so qualche libreria mancante, o altro.



  • di lepat (utente non iscritto) data: 15/10/2014 16:01:12

    se ti ho proposto un codice significa che l'ho provato e mi funziona (sul 2010), altrimenti avrei detto "non testato".
    Inoltre ti ho anche detto quale errore viene segnalato in caso di nome del file errato.
    Inoltre Rita ti ha detto che funziona
    Rimango dell'idea che sia colpa del 2007 e ti ho proposto la soluzione con PdfCreator
    Non ti basta ?



  • di Rita (utente non iscritto) data: 15/10/2014 16:23:59

    Solo una precisazione
    io utilizzo office 2007



  • di sabotto (utente non iscritto) data: 15/10/2014 17:30:14

    Ok. era la prima affermazione che non davo per scontata. Anche io ho 2007. Evidentemente sono sfortunato.
    Si puo chiudere e grazie a tutti



  • di lepat (utente non iscritto) data: 15/10/2014 17:43:03

    Oppure hai commesso qualche errore, allega il tuo file con la macro e lo testiamo



  • di sabotto (utente non iscritto) data: 15/10/2014 18:27:22

    Eccolo (Stampa PDF Sabotto). In effetti è quello originale con la macro dentro e il eprcorso del file corretto.
    Se a te funziona vuol dire che a me manca qualcosa (ho visto che anche alti hanno avuto lo stesso problema)
    Se cosi dovvesse essere vuol dire che userò la PDFCreator.
    Una precisazione che non so se puo influire: io uso "Foxit Reader" come lettore di PDF e non il classico "Adobe Acrobat Reader" che non ho installato.



  • di lepat (utente non iscritto) data: 15/10/2014 18:39:09

    funziona perfettamente sul 2010, vediamo se lo prova Rita