web-dev-qa-db-fra.com

Excel VBA pour exporter les feuilles sélectionnées vers PDF

J'utilise le code suivant pour exporter les feuilles sélectionnées d'Excel 2010 vers un fichier pdf unique ...

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

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

Mon problème est qu'il exporte uniquement la première feuille. Des idées?

18
thistledownjohn

Une fois que vous avez sélectionné un groupe de feuilles, vous pouvez utiliser Sélection

Considérer:

Sub luxation()
    ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
    Selection.ExportAsFixedFormat _
        Type:=xlTypePDF, _
        Filename:="C:\TestFolder\temp.pdf", _
        Quality:=xlQualityStandard, _
        IncludeDocProperties:=True, _
        IgnorePrintAreas:=False, _
        OpenAfterPublish:=True
End Sub

EDIT # 1:

Des tests supplémentaires ont révélé que cette technique dépend du groupe de cellules sélectionné de chaque feuille de calcul. Pour obtenir une sortie complète, utilisez quelque chose comme:

Sub Macro1()

   Sheets("Sheet1").Activate
   ActiveSheet.UsedRange.Select
   Sheets("Sheet2").Activate
   ActiveSheet.UsedRange.Select
   Sheets("Sheet3").Activate
   ActiveSheet.UsedRange.Select

   ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3")).Select
   Selection.ExportAsFixedFormat Type:=xlTypePDF, Filename:= _
      "C:\Users\James\Desktop\pdfmaker.pdf", Quality:=xlQualityStandard, _
      IncludeDocProperties:=True, IgnorePrintAreas:=False, OpenAfterPublish:= _
      True
End Sub
27
Gary's Student

Je suis assez mélangé à ce sujet. J'utilise également Excel 2010. J'ai essayé d'enregistrer deux feuilles en tant que fichier simple PDF en utilisant:

    ThisWorkbook.Sheets(Array(1,2)).Select
    **Selection**.ExportAsFixedFormat xlTypePDF, FileName & ".pdf", , , False

mais je n'ai rien d'autre que des pages blanches. Cela a sauvé les deux feuilles, mais rien sur elles. Ce n'est que lorsque j'ai utilisé:

    ThisWorkbook.Sheets(Array(1,2)).Select
    **ActiveSheet**.ExportAsFixedFormat xlTypePDF, FileName & ".pdf", , , False

que j’ai reçu un seul fichier PDF avec les deux feuilles).

J'ai essayé de sauvegarder manuellement ces deux pages en utilisant Sélection dans la boîte de dialogue Options pour enregistrer les deux feuilles que j'avais sélectionnées, mais j'avais des pages vierges. Lorsque j'ai essayé l'option Active Sheet (s), j'ai obtenu ce que je voulais. Lorsque j'ai enregistré cela sous forme de macro, Excel a utilisé ActiveSheet pour publier le PDF. Ce qui donne?

8
asp8811

c’est ce que j’ai trouvé car j’avais des problèmes avec la réponse @ asp8811 (peut-être mes propres difficultés)

'ceci fera le mettre les 2 premières feuilles dans un pdf' Note chaque ws devrait être contrôlé avec des sauts de page pour l'impression qui est un peu fastidieux 'ceci mettra explicitement le pdf dans le répertoire courant

Sub luxation2()
    Dim Filename As String
    Filename = "temp201"



Dim shtAry()
ReDim shtAry(1) ' this is an array of length 2
For i = 1 To 2
shtAry(i - 1) = Sheets(i).Name
Debug.Print Sheets(i).Name
Next i
Sheets(shtAry).Select
Debug.Print ThisWorkbook.Path & "\"


    ActiveSheet.ExportAsFixedFormat xlTypePDF, ThisWorkbook.Path & "/" & Filename & ".pdf", , , False

End Sub
4
HattrickNZ