Wordファイルの特定のページをPDF化するExcelVBA

スポンサーリンク

Word→PDFの繰り返しを自動化して楽にする

以前にWordをPDFにするExcelVBAのコードをご紹介しましたが、その時のコードはWordファイルの全ページをPDFにするものでした。

今回は同僚から「300ページくらいあるWordの一つのファイルを3-4ページ位ごとに分割してPDFにするのに何か楽にする方法がないか」と相談があり、負担を軽くするためのコードをk考えてみました。

Wordファイルを分割してPDFにする手順

今回のツールもExcelVBAを使用して作成することにしました。
まず対象となるWordファイルを開いて、指定したページごとに区切ってPDF化していくのを繰り返すフローを想定しています。

全ページをPDF化してそこからPDFファイルを分割する方法も考えましたが、PDFを分割するソフトが必要なのと、VBAでの完全自動化が難しそうだったのでやめました。
(他のプログラムだと簡単にできるのかもしれませんが。)

スポンサーリンク

作成したExcelワークシート

今回作成したツールを使用するために必要な情報は下記のようにワークシートに記載するようにしています。

①対象フォルダ名・対象ファイル名を取得し、②変更後のPDFファイル名を記入、③印刷の開始位置、終了位置を必要な行だけ記入して、④PDF出力すると元ファイルと同じフォルダに作成したPDFファイルが格納されるフローとなります。

vba150

作成したExcelVBAコード

1.対象ファイルの取得(①)

対象ファイルをパス含めて手入力しても良いのですが、手間なのでファイルを選択すると自動で記入されるようにしてみました。
下記のコードを実行すると、選択したファイルについて、A2セルにフォルダ名・A4セルにファイル名が入ります。

Sub Wordファイル名パス取得()

Dim FolderName As String
Dim FileName As String ’文字列を入れる変数として「FileName」を使う
FileName = Application.GetOpenFilename ’ダイアログを用いて選択したファイルのフルパスを取得

FolderName = Left(FileName, InStrRev(FileName, “”) - 1) ’フォルダ名とファイル名に分離
FileName = Mid(FileName, InStrRev(FileName, “”) + 1)

ThisWorkbook.ActiveSheet.Cells(2, 1) = FolderName ’セルに記入
ThisWorkbook.ActiveSheet.Cells(4, 1) = FileName

End Sub

2.連続PDF化の実行(④)

連続PDF化のコードは下記の通りです。

実行前に②出力するファイル名を指定することと、③PDF化対象のページを指定しておく必要があります。

Sub wordファイルページ指定して印刷()

Dim objWord As Word.Application
Set objWord = CreateObject(“Word.Application”)
objWord.Visible = True

Dim objDoc As Word.Document

Dim FileName As String
Dim i
Dim 出力FileName As String

’出力ファイル名の設定
’拡張子が記入されていてもなくても対応できるように一旦削除

出力FileName = Cells(2, 1) & “” & Cells(4, 1)
出力FileName = Replace(出力FileName, “.pdf”, “”)

FileName = Cells(2, 1) & “” & Cells(4, 1)
Set objDoc = objWord.Documents.Open(FileName)

i = 7
Do While Cells(i, 1) <> “” ’ 印刷対象のページがなくなるまで実行
objDoc.ExportAsFixedFormat OutputFileName:=出力FileName & “-” & Format(i - 6, “000”) & “.pdf”, ExportFormat:=wdExportFormatPDF, _
Range:=wdExportFromTo, From:=Cells(i, 1), To:=Cells(i, 3)
i = i + 1
Loop

objDoc.Close
Set objDoc = Nothing

objWord.Quit
Set objWord = Nothing

End Sub

「ExportAsFixedFormat」の引数「Range」「From」「To」を指定することで印刷(PDF化)範囲を設定します。
設定内容は下記の通りです。

  • Range:=wdExportFromTo 範囲指定の場合この記述が必須になります。
  • From:=Cells(i, 1) 各行の設定開始ページ
  • To:=Cells(i, 3)  各行の設定終了ページ
  • おすすめ書籍 (広告)

    コメント