2013-01-18 16 views
18

Ho un foglio di calcolo per la segnalazione che acquisisce alcuni dati da un database e forma tre fogli di informazioni di report di riepilogo. Voglio eseguire automaticamente il foglio di calcolo dalla riga di comando e farlo salvare automaticamente tutti e tre i fogli di reporting come file PDF.Salva più fogli in .pdf

All'inizio pensavo di poter avere una macro VBA sul foglio di farlo con una serie di "stampa come PDF", ma che richiede una finestra di dialogo interattiva intermedia per specificare il nome del file di output. Quindi trovo che posso solo salvare come pdf, e la macro può impostare il nome del file di output. Tuttavia questo crea tre file separati, e devo poi metterli insieme esternamente per unirli.

(È strano che Salva come PDF consente di salvare solo un foglio, dove altre modalità salvare sembrano salvare l'intera cartella di lavoro.)

Sì, ci sono strumenti per la fusione dei tre file più tardi, ma voglio sapere se c'è un modo semplice per ottenere Excel per salvare più fogli insieme come un unico file pdf.

I Stampa ora da una serie di cose come:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ... 

potevo fare invece un unico prospetto qualcosa di simile (pseudo-codice):

ThisWorkbook.Sheets(1,2,3,4).ExportAsFixedFormat Type:=xlTypePDF, ... 

risposta

52

Inizia selezionando i fogli desiderati combinare:

ThisWorkbook.Sheets(Array("Sheet1", "Sheet2")).Select 

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _ 
    "C:\tempo.pdf", Quality:= xlQualityStandard, IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=False, OpenAfterPublish:=True 
+0

Perfetto; Grazie! – guthrie

+0

@Tim '+ 1' questo è un pezzo utile :) – bonCodigo

+0

La possibilità di selezionare una serie di fogli ha funzionato meravigliosamente. Grazie. –

6

Simile alla risposta di Tim - ma con un assegno per il 2007 (dove il PDF exp ort non è installato per impostazione predefinita):

 
Public Sub subCreatePDF() 

    If Not IsPDFLibraryInstalled Then 
     'Better show this as a userform with a proper link: 
     MsgBox "Please install the Addin to export to PDF. You can find it at http://www.microsoft.com/downloads/details.aspx?familyid=4d951911-3e7e-4ae6-b059-a2e79ed87041". 
     Exit Sub 
    End If 

    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _ 
     Filename:=ActiveWorkbook.Path & Application.PathSeparator & _ 
     ActiveSheet.Name & " für " & Range("SelectedName").Value & ".pdf", _ 
     Quality:=xlQualityStandard, IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=False, OpenAfterPublish:=True 
End Sub 

Private Function IsPDFLibraryInstalled() As Boolean 
'Credits go to Ron DeBruin (http://www.rondebruin.nl/pdf.htm) 
    IsPDFLibraryInstalled = _ 
     (Dir(Environ("commonprogramfiles") & _ 
     "\Microsoft Shared\OFFICE" & _ 
     Format(Val(Application.Version), "00") & _ 
     "\EXP_PDF.DLL") <> "") 
End Function 
+0

Buona idea, grazie! – guthrie

+0

Funzionerà anche con Excel 2003? Voglio dire, IsPDFLibraryInstalled restituirà false? – Anthony

+0

In realtà ricevo un errore di sintassi sul 2010. – Anthony

2

vi consiglio di aggiungere la seguente riga dopo l'esportazione in PDF:

ThisWorkbook.Sheets("Sheet1").Select 

(dove ad esempio. Sheet1 è il foglio singolo che si desidera essere attivo in seguito)

Lasciando più fogli in uno stato selezionato potrebbe causare problemi nell'eseguire un codice. (ad esempio, la protezione non funziona correttamente quando vengono selezionati più fogli.)

-3

In Excel 2013 è sufficiente selezionare più fogli e fare un "Salva con nome" e selezionare PDF come tipo di file. Le pagine multiple si apriranno in PDF quando si fa clic su Salva.

+2

richiesta, come sopra. – guthrie