Salva in PDF



  • Salva in PDF
    di biagio (utente non iscritto) data: 05/02/2014 12:47:01

    Buongiorno,
    sono qui per chiedervi due aiuti; 1° per un chiarimento, 2° per un problema.
    1- "chiarimento" vorrei sapere se il codice sotto riportato "che funziona" può essere migliorato o semplificato.

    Private Sub CommandButton5_Click()
    ' Salva fogli singoli in formato PDF nel percorso specificato c:

    Application.ScreenUpdating = False

    Sheets(4).Select ' seleziono il foglio4
    Sheets(4).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:UsersDesktopprova" & Range("B1").Value & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

    Sheets(5).Select ' seleziono il foglio5
    Sheets(5).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:UsersDesktopprova" & Range("B1").Value & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

    Sheets(6).Select ' seleziono il foglio6
    Sheets(6).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:UsersDesktopprova" & Range("B1").Value & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False

    Sheets(7).Select ' seleziono il foglio7
    Sheets(7).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
    "C:UsersDesktopprova" & Range("B1").Value & ".pdf", Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
    'Se si vuole aprire in automatico il file Pdf dopo il salvataggio imposta OpenAfterPublish:=True

    ' Tutti i fogli salvati prendono il nome dalla cella B1 e vengono salvati singolarmente nella cartella Prova

    Application.ScreenUpdating = True
    End Sub

    2- "Problema" avrei bisogno di salvare i fogli 4,5,6,7 in un'unico file Pdf dove il nome del file deve essere inserito nel codice stesso, cioè ha un nome Fisso.
    Da vari tentativi e ricerche in rete, ho trovato qualcosa del genere ma non è ciò che mi serve.
    Nel senso che mi salva in un unico foglio PDF, tutti i fogli. Invece dovrei essere io ad indicarli quali fogli integrare nel salvataggio PDF.
    Non saprei come risolvere!
    Grazie....................



  • di Grograman (utente non iscritto) data: 05/02/2014 13:14:27

    Non testato, ma per rispondere alla prima domanda darei un accettata al codice:
     
    Private Sub CommandButton5_Click()
    ' Salva fogli singoli in formato PDF nel percorso specificato c:
    Dim strPath As String, strNome As String
    Dim i As Long
    strPath = "C:UsersDesktopprova"
      Application.ScreenUpdating = False
      For i = 4 To 7
        strNome = Sheets(i).Range("B1")
        Sheets(i).ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
        strPath & strNome & ".pdf", Quality:=xlQualityStandard, _
       IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:=False
      Next i
      Application.ScreenUpdating = True
    End Sub
    



  • di biagio (utente non iscritto) data: 06/02/2014 09:05:36

    Grazie 1000 Grograman,
    Funziona!
    Era come immaginavo. Hai ridotto e semplificato il mio codicione molto pesante.
    Per il secondo problema, ho trovato in questo sito un post di Harrybosh, modificando soltanto da dove prende il nome il file pdf salvato. Riporto qui il codice...

    Private Sub CommandButton
    nomecartella = "Prova pdf" ' il file prende il nome contenuto nell'apice
    'nomecartella = ActiveWorkbook.Name ' questo è la riga originale
    percorso = "C:UsersDesktopabc"
    ThisWorkbook.Sheets.Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
    Filename:=percorso & nomecartella & ".pdf", _
    Quality:=xlQualityStandard, _
    IncludeDocProperties:=True, _
    IgnorePrintAreas:=False, _
    OpenAfterPublish:=False

    End Sub

    Per essere completo (nel mio caso) il codice sopra riportato, avrei bisogno solo di specificare i fogli da salvare.
    Se qualcuno può aiutarmi....
    Grazie....



  • di Vecchio Frac data: 06/02/2014 21:53:14

    La parte di codice che esegue il salvataggio è qui:

    ThisWorkbook.Sheets.Select
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ...

    vengono selezionati tutti i fogli quindi si procede all'esportazione in PDF.
    Quindi ti basterà un piccolo ciclo per ogni foglio che vuoi stampare.
    Abbozzo una soluzione (devi completare la parte dopo xlTypePDF naturalmente, basta ricopiarla dal tuo codice).
     
    for each sh in worksheets
        if right(sh.name, 1) like "[4-7]" then
            sh.ExportAsFixedFormat Type:=xlTypePDF, ...
        end if
    next






  • di biagio (utente non iscritto) data: 07/02/2014 19:42:32

    Ciao Frac,
    Bentornato!
    Spesso e volentieri visito questo Forum e ho notato che da un bel pò che manchi....
    Grazie per il tuo contributo ma ho risolto così. Allego il codice che ho assemblato "Funzionante", perchè potrebbe essere utile ad altri frequentatori del Forum.
    Quindi, disponibile per la community.......
    Grazie a tutti
    By biagio



     
    Dim objFso As Object
    Dim objFolder As Object
    Set objFso = CreateObject("Scripting.FileSystemObject")
    If objFso.FolderExists("C:usersdesktopabc") Then   ''Specificare il percorso della cartella
    msgbox "La cartella ABC esiste già...", vbCritical, ("ATTENZIONE !!!")
    Else
    msgbox "La cartella ''ABC'' non esisteva sul Desktop." & Chr(13) & "Adesso che è stata creata... puoi salvare il file...", vbInformation, ("Nuova Cartella creata con successo... ")
    Set objFolder = objFso.CreateFolder("C:usersdesktopabc")  'Specificare il percorso della cartella
                                                                        
    End If
    
    Set objFolder = Nothing
    Set objFso = Nothing
    
    Dim Variabile As Integer
    Variabile = msgbox("Premi OK per salvare il file...", vbOKCancel)
    If Variabile = 1 Then
    
    Dim foglio As Variant
        foglio = Array()
        For i = 4 To 6     ' Salva i fogli 4,5,6  in un'unico file Pdf 
            ReDim Preserve foglio(i - 4)
            foglio(i - 4) = Sheets(i).Name
        Next i
        nomecartella = "Prova"                          'Scrivere il nome del file tra la'apice.  Oppure inserisci: =ActiveWorkbook.Name   così prende  il nome del file originale
        percorso = "C:usersdesktopabc"
    
        Sheets(foglio).Select
        ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                        Filename:=percorso & nomecartella & ".pdf", _
                                        Quality:=xlQualityStandard, _
                                        IncludeDocProperties:=True, _
                                        IgnorePrintAreas:=False, _
                                        OpenAfterPublish:=False   ' Se vuoi visualizzarlo in automatico imposta su true
    
    End If
    End Sub
    



  • di biagio (utente non iscritto) data: 07/02/2014 19:50:31

    ops.......



  • di nichicanta (utente non iscritto) data: 07/02/2014 19:58:10

    Ciao Biagio, visto che hai fatto una cosa pregievole ed encomiabile per tutta la community, se hai già un file ( senza dati sensibili ovviamente) con il codice da te sistemato e postato lo potresti gentilmente allegare, lo so che come lo hai commentato è facile crearlo, ma se già pronto è meglio.
    Il mio ringraziamento personale anche in caso non favorevole.
    Ti saluto, continuiamo cosi tutti quanti e sosteniamo questo forum bellissimo e pieno di bravissime persone disponibili e preparate.



  • di biagio (utente non iscritto) data: 07/02/2014 20:14:55

    Ciao nichicanta,
    il file su cui sto lavorando è pienissimo di dati personali e non.... Per fare ciò dovrei cancellare una marea di dati sia nei fogli che nell'userform. Se trovo un vecchio file dove molto tempo fà il mio progetto è nato con i vari passaggi, non sarò lieto, ma di più condividerlo con Voi altri. Anche perchè solo così si cresce culturalmente.
    Non ti prometto nulla, però appena avrò un pò di tempo in più sicuro che cercherò.
    P.s. Volevo aggiungere al post precedente che, il fatto di creare una directory sul desktop, era che senza questa istruzione se non trovava la direcotry, andava in errore VBA.
    Ciao a tutto il Forum



  • di Grograman (utente non iscritto) data: 08/02/2014 13:44:24

    Visto il tipo di oggetti che usi ti consiglio di utilizzare la libreria "Microsoft Scripting Runtime" che ha le variabili ad hoc per files, cartelle, percorsi ecc ecc.