ワークシートをPDF化する(ExportAsFixedFormatメソッド)
ExportAsFixedFormatメソッドの三態
ExportAsFixedFormatメソッドの対象オブジェクト
よそにデータを送るときに、PDF化する必要があって、WordであれExcelであれ、よくこのExportAsFixedFormatメソッドにはお世話になっている。
んで、改めて調べてみたら、ExcelVBAの場合、対象オブジェクトが3つ(ホントは4つかな? でもChartオブジェクトとか私は使わないので……)もあると分かった。
すなわち、
の3つ。
まあ、用途というか、実行結果は容易に想像がつく。
上から順に、
- ブック全体をPDF化
- ワークシートをPDF化
- セル範囲をPDF化
ってところだろう。
ExportAsFixedFormatメソッドの使用実験
ワークシートを
こんなふうに用意して、
次のようなコードを書いて実験してみた。
リスト1-1
Private Sub useExportAsFixedFormatMethodOfWorkbook(ByVal filePath As String) ThisWorkbook.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=filePath & "ワークブック.pdf" '' End Sub
リスト1-2
Private Sub useExportAsFixedFormatMethodOfWorksheet(ByVal filePath As String) Dim Sh As Worksheet Set Sh = ActiveSheet Sh.ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=filePath & "ワークシート.pdf" '' End Sub
リスト1-3
Private Sub useExportAsFixedFormatMethodOfRange(ByVal filePath As String) Dim Sh As Worksheet Set Sh = ActiveSheet Sh.Range("Print_Area").ExportAsFixedFormat Type:=xlTypePDF, _ Filename:=filePath & "印刷範囲.pdf" '' End Sub
以上がオブジェクトごとのコード。どれもそれぞれのオブジェクトに対して単純にExportAsFixedFormatメソッドを実行するだけのコードなので特に説明はいらないと思う。
いづれも、引数filePathで保存先のフォルダパスを受け取るので、あとはそれぞれのプロシージャでファイル名を与えている。
リスト1-3では、オブジェクトに印刷範囲を指定している。
で、この3つのコードを、次のリスト2で実行する。
リスト2
Public Sub testPDFCreation() Dim str As String str = ThisWorkbook.Path & "\超人墓場\" '" Call useExportAsFixedFormatMethodOfWorkbook(str) Call useExportAsFixedFormatMethodOfWorksheet(str) Call useExportAsFixedFormatMethodOfRange(str) End Sub
実行結果
見ての通り、Worksheetオブジェクトに対して実行しても、Range("Print_Area")に対して実行しても結果は同じだった。
ちなみに、Workbookオブジェクトに対して実行すると、バカ正直に全てのワークシートの印刷範囲がPDF化された。
おわりに
……ということは、シートの一部だけをPDFにしたい、という事情でもない限り、ワークシートの印刷範囲をPDF化したいのなら、WorksheetオブジェクトのExportAsFixedFormatメソッドを使った方がラク、ということになりそう。
追記
ExportAsFixedFormat
メソッドを用いたPDF化の場合、ファイルサイズが異様に大きくなってしまう。
そのあたりが気になる方はコチラをどうぞ。