2013-01-18 10 views
18

J'ai une feuille de calcul de rapport qui saisit certaines données d'une base de données et forme trois feuilles d'informations de rapport de synthèse. Je souhaite exécuter automatiquement la feuille de calcul à partir de la ligne de commande et enregistrer automatiquement les trois feuilles de rapport sous la forme d'un fichier PDF. Au début, j'ai pensé que je pourrais avoir une macro VBA sur la feuille le faire par une série de "impression en PDF", mais cela nécessite une boîte de dialogue interactive intermédiaire pour spécifier le nom du fichier de sortie. Ensuite, je trouve que je peux simplement enregistrer en pdf, et la macro peut définir le nom du fichier de sortie. Cependant, cela crée trois fichiers séparés, et je dois ensuite les assembler à l'extérieur pour les fusionner.Enregistrer plusieurs feuilles en .pdf

(Il est étrange que enregistrer en tant que pdf enregistre une seule feuille, où d'autres semblent enregistrer les modes pour enregistrer le classeur entier.)

Oui, il existe des outils pour la fusion des trois fichiers plus tard, mais je veux savoir S'il existe un moyen facile d'obtenir Excel pour enregistrer plusieurs feuilles ensemble comme un fichier pdf.

J'imprimer maintenant par une série de choses comme:

ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, ... 

ce que je pourrais faire au lieu d'une seule déclaration quelque chose comme (pseudo-code):

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

Répondre

52

Commencez par sélectionner les feuilles que vous voulez combiner:

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

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

Parfait; Merci! – guthrie

+0

@Tim '+ 1' ceci est une pièce utile :) – bonCodigo

+0

La possibilité de sélectionner un tableau de feuilles a merveilleusement bien fonctionné. Je vous remercie. –

6

similaires à la réponse de Tim - mais avec un chèque de 2007 (où l'exp PDF ort est pas installé par défaut):

 
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

Bonne idée, merci! – guthrie

+0

Cela fonctionnera-t-il également avec Excel 2003? Je veux dire, est-ce que IsPDFLibraryInstalled retournera faux? – Anthony

+0

En fait, j'obtiens une erreur de syntaxe sur 2010. – Anthony

2

Je recommande d'ajouter la ligne suivante après l'exportation au format PDF:

ThisWorkbook.Sheets("Sheet1").Select 

(où, par exemple. Sheet1 est la seule feuille que vous souhaitez activer par la suite)

Laisser plusieurs feuilles dans un état sélectionné peut entraîner des problèmes d'exécution du code. (par exemple, déprotection ne fonctionne pas correctement lorsque plusieurs feuilles sont activement sélectionnées.)

-3

Dans Excel 2013, sélectionnez simplement plusieurs feuilles et faites un "Enregistrer sous" et sélectionnez PDF comme type de fichier. Les multiples pages s'ouvriront en PDF lorsque vous cliquez sur Enregistrer.

+2

solution VBA demandé, comme ci-dessus. – guthrie

Questions connexes