ワークシートをPDF化する(ExportAsFixedFormatメソッド)

ExportAsFixedFormatメソッドの三態

ExportAsFixedFormatメソッドの対象オブジェクト

よそにデータを送るときに、PDF化する必要があって、WordであれExcelであれ、よくこのExportAsFixedFormatメソッドにはお世話になっている。

んで、改めて調べてみたら、ExcelVBAの場合、対象オブジェクトが3つ(ホントは4つかな? でもChartオブジェクトとか私は使わないので……)もあると分かった。

すなわち、


の3つ。

まあ、用途というか、実行結果は容易に想像がつく。

上から順に、

  • ブック全体をPDF化
  • ワークシートをPDF化
  • セル範囲をPDF化


ってところだろう。

ExportAsFixedFormatメソッドの使用実験

ワークシートを

f:id:akashi_keirin:20170617230534j:plain

f:id:akashi_keirin:20170617230545j:plain

こんなふうに用意して、

次のようなコードを書いて実験してみた。

リスト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
実行結果

f:id:akashi_keirin:20170617230552j:plain

f:id:akashi_keirin:20170617230607j:plain

見ての通り、Worksheetオブジェクトに対して実行しても、Range("Print_Area")に対して実行しても結果は同じだった。

ちなみに、Workbookオブジェクトに対して実行すると、バカ正直に全てのワークシートの印刷範囲がPDF化された。

おわりに

……ということは、シートの一部だけをPDFにしたい、という事情でもない限り、ワークシートの印刷範囲をPDF化したいのなら、WorksheetオブジェクトのExportAsFixedFormatメソッドを使った方がラク、ということになりそう。

@akashi_keirin on Twitter