【VBA】PDFファイルのページ数を取得する

VBAから
 ・PDFファイルのページ数を取得
できます!

PR

前提

正規表現による検索で
 ・ページ数の部分の個数(=ページ数)
を取得します。

PR

VBAコード

ここでは例として、
 ・デスクトップ配下のファイル「サンプルPDF.pdf」の
 ・ページ数を取得
します。

サンプルPDF.pdfのページ数は24
サンプルPDF.pdfのページ数は24
Option Explicit

Sub sample()
    
    Dim pdfFilePath As String
    Dim objReg As Object
    Dim fileNo As String
    Dim tempStr As String
    Dim pageCount As Long

    'PDFファイルのパスを指定
    pdfFilePath = "C:\Users\user\Desktop\サンプルPDF.pdf"
    
    'RegExpオブジェクトの取得
    Set objReg = CreateObject("VBscript.RegExp")
    
    '検索パターンを指定 ※ページ数の部分を取得するパターンを指定
    objReg.Pattern = "/Type\s*/Page[^s]"
    '検索対象として「文字列全体」を指定
    objReg.Global = True
    
    '使用可能なファイル番号を取得
    fileNo = FreeFile
    'PDFファイルをバイナリモードで開く
    Open (pdfFilePath) For Binary As #fileNo
    
    '「String型変数の桁数」を「PDFファイルのバイト数」と同じにする ※バイト数分の半角スペースを設定
    tempStr = Space(LOF(fileNo))
    
    'PDFファイルの内容を丸ごとString型変数へ設定
    Get #fileNo, , tempStr
    
    'PDFファイルを閉じる
    Close fileNo
    
    'PDFファイルのページ数を取得 ※ページ数の部分の個数を取得
    pageCount = objReg.Execute(tempStr).COUNT
    
    MsgBox ("PDFファイルのページ数は『" & pageCount & "』です!")
    
    '後片づけ
    Set objReg = Nothing

End Sub

「CreateObject(“VBscript.RegExp”)」により「RegExp」オブジェクトを取得します(15行目)。

「RegExp」オブジェクトに検索パターン(=ページ数の部分を取得するパターン)を設定します(18行目)。
※上記では「/Type\s*/Page[^s]」を設定しています。

OPENステートメントで、PDFファイルを開きます(25行目)。
※上記では「バイナリモード」で開いています。

PDFファイルの内容を丸ごと変数へ設定できるように、「String型変数の桁数」を「PDFファイルのバイト数」と同じにします(28行目)。
※LOF関数とSpace関数を利用することで。

GETステートメントにより、PDFファイルの内容を丸ごとString型変数へ設定します(31行目)。

「RegExp」オブジェクトの「Execute」メソッドにより、正規表現による検索を実行します(37行目)。
※実行することで「IMatchCollection2」オブジェクトを取得します。
※「IMatchCollection2」オブジェクトを取得することは、VBEのウォッチウィンドウで確認しました。
「IMatchCollection2」オブジェクトの記載は、公式サイトに存在しないようです。(私が調査した限りでは)

「IMatchCollection2」オブジェクトの「COUNT」プロパティにより、「ページ数の部分の個数(=ページ数)」を取得します(39行目)。

PR

実行結果

PDFファイルのページ数を取得できました。

実行結果(PDFファイルのページ数は24)
実行結果(PDFファイルのページ数は24)
PR

参考①

Wordファイルのページ数も取得できます。

詳細は以下の記事をご確認ください。

PR

参考②

Excel(ブック)の内容をPDFファイル(パスワードあり)として出力することもできます。

詳細は以下の記事をご確認ください。

PR

参考③

上記のVBAコードで使用した以下の詳細は、公式サイトをご確認ください。

●「RegExp」オブジェクト


●OPENステートメント


●LOF関数


●Space関数


●GETステートメント