[ VBA ] ExcelシートをPDFファイルに変換して保存する ( ActiveSheet.ExportAsFixedFormat )

Pocket

ここでは、VBA でシートの内容を PDF ファイルに変換して保存するサンプルスクリプトを掲載しています。

スポンサーリンク

ExcelシートをPDFファイルに変換して保存する

名前をつけてファイルを保存(ファイルの種類にはPDFを指定)すると同様のことができれば良いので、実際に出力操作を行いマクロを確認すると次のようなマクロが生成されました。

PDFファイルに出力する操作

PDFファイルに出力する操作 ( 画面キャプチャは Excel2013 )

    ' メモ:見やすいように加工はしてあります
    ' カレントディレクトリを変更
    ChDir "C:\Users\Desktop"
    ' ファイルをPDFファイルに出力する
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                    Filename:= "C:\Users\Desktop\Book1.pdf", _
                                    Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, _ 
                                    IgnorePrintAreas:=False, _
                                    OpenAfterPublish:= True     ' PDF作成後にファイルを開く

プリンタの印刷でPDFファイルに出力する

次に印刷設定で、プリンターに 「 Microsoft Print to PDF 」 を選択してPDFを作成した場合のマクロは次のようになりました。

印刷でPDFファイルに出力する

印刷でPDFファイルに出力する

    ' ファイルを印刷する
    ActiveWindow.SelectedSheets.PrintOut Copies:=1, _
                                         Collate:=True, _
                                         IgnorePrintAreas:=False

Copies:印刷部数

Collate:部単位で印刷する場合はTrue

IgnorePrintAreas:印刷領域を無視して、全体を印刷する場合は True

このマクロの場合だと、通常の印刷と変更ありません。現在のエクセルで選択されたプリンターから印刷するマクロとして扱われます。確実にPDFファイルに印刷する保障のないこと、PDFが選択されていてもファイル名選択ダイアログが出力されてしまいます。

Excelシート全体を1ページに収まるようにPDFファイルに出力する

次にシート全体を1ページに収まるようにPDFファイルを作成するサンプルスクリプトです。まずは、必要最小限の設定です。PDFファイルに出力する前に、ページ設定を変更しています。

    ' 印刷設定
    With ActiveSheet.PageSetup
        .Zoom = False       ' 印刷時の拡大・縮小はしない
        .FitToPagesWide = 1 ' 横は1ページに収まるようにする
        .FitToPagesTall = 1 ' 楯は1ページに収まるようにする
    End With
    ' PDF ファイルに出力する
    ActiveSheet.ExportAsFixedFormat Type:=xlTypePDF, _
                                    Filename:="C:\Users\Desktop\Book2.pdf", _
                                    Quality:=xlQualityStandard, _
                                    IncludeDocProperties:=True, _
                                    IgnorePrintAreas:=False, _
                                    OpenAfterPublish:= True

VBA 上達への近道

上記スクリプトも、実際にエクセル上で操作してマクロを生成してから、必要なものを取捨選択しています。実際には、以下のようにページ設定部分だけでも大量のマクロが生成されていました。この中から必要なものを本なり、インターネット検索なりで調査します。

VBA の知識を向上するには、やりたいことをエクセル上で操作し、兎にも角にもマクロを記録して中身を確認してみましょう。      偉そうに言ってすいません。

自動生成されたページ設定の大量のマクロ

    With ActiveSheet.PageSetup
        .LeftHeader = ""
        .CenterHeader = ""
        .RightHeader = ""
        .LeftFooter = ""
        .CenterFooter = ""
        .RightFooter = ""
        .LeftMargin = Application.InchesToPoints(0.7)
        .RightMargin = Application.InchesToPoints(0.7)
        .TopMargin = Application.InchesToPoints(0.75)
        .BottomMargin = Application.InchesToPoints(0.75)
        .HeaderMargin = Application.InchesToPoints(0.3)
        .FooterMargin = Application.InchesToPoints(0.3)
        .PrintHeadings = False
        .PrintGridlines = False
        .PrintComments = xlPrintNoComments
        .PrintQuality = 600
        .CenterHorizontally = False
        .CenterVertically = False
        .Orientation = xlPortrait
        .Draft = False
        .PaperSize = xlPaperA4
        .FirstPageNumber = xlAutomatic
        .Order = xlDownThenOver
        .BlackAndWhite = False
        .Zoom = False
        .FitToPagesWide = 1
        .FitToPagesTall = 1
        .PrintErrors = xlPrintErrorsDisplayed
        .OddAndEvenPagesHeaderFooter = False
        .DifferentFirstPageHeaderFooter = False
        .ScaleWithDocHeaderFooter = True
        .AlignMarginsHeaderFooter = True
        .EvenPage.LeftHeader.Text = ""
        .EvenPage.CenterHeader.Text = ""
        .EvenPage.RightHeader.Text = ""
        .EvenPage.LeftFooter.Text = ""
        .EvenPage.CenterFooter.Text = ""
        .EvenPage.RightFooter.Text = ""
        .FirstPage.LeftHeader.Text = ""
        .FirstPage.CenterHeader.Text = ""
        .FirstPage.RightHeader.Text = ""
        .FirstPage.LeftFooter.Text = ""
        .FirstPage.CenterFooter.Text = ""
        .FirstPage.RightFooter.Text = ""
    End With

スポンサーリンク


Pocket

Leave a Comment

Your email address will not be published. Required fields are marked *