2017-04-06 8 views
0

ブックに特定のシートをPDFにエクスポートするためのVBAマクロを作成しました。十分に簡単です。私が経験している問題は、自分のコードがSheet4の一部しか選択していないことです。そのため、シートのPDF部分が欠落しています。印刷用シート全体を選択:Excel VBA

Sheet4には、A1:W80のデータが含まれています。ただし、以下のコードを実行すると、範囲A1:W75のみが印刷用に選択されます。私はPrintAreaがページ全体を含んでいることを確認しました。印刷するとすべてがすばらしく見えます。

私は無限に解決策を探しましたが、成功しませんでした。これはページレイアウト設定の問題でしょうか? PDFへのエクスポート時に、シートの一部だけではなく、シート全体を選択する方法を教えてください。ここで

が私のコードです:良いプラクティスとして

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

'シート(アレイ( "シート1"、 "シート2"、 "シート3"、 "シート4"))SELECT'は' Selection'シート全体がありません - それだけで選択します。 4枚の用紙を選択し、それぞれの用紙の「選択」を、用紙1の用紙と同じにします。 – YowE3K

答えて

3

、あなたは印刷領域として、各シートのご使用範囲を設定し、ページにそれに合わせて、以下のサブを使用することができます

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 

Selectionオブジェクトではなく、ActiveSheetオブジェクトを選択してから使用することをお勧めします。これは多分直感的ではありませんが、シートには、を選択したものではなく、のシートに印刷します。だから、

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 
関連する問題