2017-04-06 1 views
0

J'ai créé une macro VBA pour exporter des feuilles spécifiques d'un classeur vers un fichier PDF. Assez simple. Le problème que je rencontre est que mon code sélectionne seulement une partie de Sheet4, donc dans ma partie PDF de la feuille est manquant.Sélectionnez des feuilles entières pour l'impression: Excel VBA

Sheet4 contient des données dans la plage A1:W80. Toutefois, lors de l'exécution du code ci-dessous, seule la plage A1:W75 est sélectionnée pour l'impression. J'ai confirmé que mon PrintArea contient toute la page. Tout semble très bien lors de l'impression.

J'ai cherché indéfiniment une solution, sans succès. Cela peut-il être un problème de mise en page? Comment puis-je m'assurer de sélectionner la totalité de la feuille, au lieu d'une partie seulement, lors de l'exportation au format PDF?

Voici mon code:

Sub SaveReportPDF() 

    Dim filepath As String 

    filepath = "ABC" 

    ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select 
    Selection.ExportAsFixedFormat _ 
     Type:=xlTypePDF, _ 
     Filename:=filepath, _ 
     Quality:=xlQualityStandard, _ 
     IncludeDocProperties:=True, _ 
     IgnorePrintAreas:=False, _ 
     OpenAfterPublish:=False 

End Sub 
+1

'Sheets (Array ("Sheet1", "Feuil2", "Feuil3", "Feuil4")) select' ne fait pas' Selection' la feuille entière - il seulement sélectionne les 4 feuilles et rend la 'Sélection' sur chaque feuille identique à ce qu'elle est sur Sheet1. – YowE3K

Répondre

3

Comme bonne pratique, vous pouvez définir votre plage utilisée de chaque feuille comme la zone d'impression, et l'adapter à la page, en utilisant les sous:

Sub ScaleForPrinting() 
    Dim sh As Worksheet 
    ' Stop PrintCommunication for speed 
    Application.PrintCommunication = False 
    ' Cycle through each sheet 
    For Each sh In ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")) 
     ' Set print area to used range of sheet 
     sh.PageSetup.PrintArea = sh.UsedRange 
     ' Remove zoom, scale sheet to fit 1 page 
     With sh.PageSetup 
      .CenterHorizontally = True 
      .CenterVertically = True 
      .Zoom = False 
      .FitToPagesWide = 1 
      .FitToPagesTall = 1 
     End With 
    Next sh 
    ' Enable PrintCommunication to apply settings 
    Application.PrintCommunication = True 
End Sub 

Ensuite, vous devrez utiliser l'objet ActiveSheet après la sélection, plutôt que l'objet Selection. C'est peut-être contre-intuitif, mais vous voulez imprimer les feuilles pas ce que vous avez sélectionné dans les feuilles. .

Alors:

ScaleForPrinting 
ThisWorkbook.Sheets(Array("Sheet1", "Sheet2", "Sheet3", "Sheet4")).Select 
ActiveSheet.ExportAsFixedFormat _ 
    Type:=xlTypePDF, _ 
    Filename:=filepath, _ 
    Quality:=xlQualityStandard, _ 
    IncludeDocProperties:=True, _ 
    IgnorePrintAreas:=False, _ 
    OpenAfterPublish:=False 
' Deselect sheets to avoid nasty multiple sheet accidental editing! 
ThisWorkbook.Sheets("Sheet1").Select