前回、ハイパーリンクを使って、PDFファイルを開く方法をご紹介しました。
ただ開けるだけならこの方法で良いのですが、PDFファイルを開けることができたら、次はページ指定して開いたら使い勝手が良くなるのではないか、と思ったのです。
ネット上のPDFファイルは、ページ指定して開く(リンクする)ことができるので、Accessからでもできそうだなと思ったんです。
そこで、調べてみました。
ローカルドライブ上のPDFにURLのオプションは使えません
アドビ社のHPによると、Web上にあるPDFファイルでしたら、URLの後ろにオプションを設定することでPDFのページを指定して開くこともできますが(4ページを指定するときは、#page=4 を加える。)、残念なことに、ローカルハードドライブ上のPDFファイルに対しては、このオプションが使用できないそうです。
PDF ファイル内の特定のページに HTML リンクをターゲットにするには、リンクの URL の末尾に「#page=[ページ番号]」を追加します。
例えば、次の HTML タグは、myfile.pdf という PDF ファイルの 4 ページを開きます。
<A HREF=”http://www.example.com/myfile.pdf#page=4″>
注意:リンクに UNC サーバーの場所(\\servername\folder)を使用する場合は、次のセクションの手順を使用して、設定先に開くようにリンクを設定します。ローカルハードドライブのアドレス(c:\folder\)を含む URL を使用する場合は、ページ番号または設定先にリンクできません。ページ番号へのリンクは、HTTP または HTTPS の場所を使用する場合にのみ機能します。 UNC サーバーの場所は、このドキュメントの次のセクションで概説する、設定先メソッドを使用する場合にのみ機能します。
https://helpx.adobe.com/jp/acrobat/kb/link-html-pdf-page-acrobat.html から引用
つまり、ハイパーリンクを使って、URLの構文でページ指定してPDFファイルを開くことはできないようです。
さらに調べてみると、コマンドラインでページ指定して開く方法を見つけました。
ですが、そのサンプルコードは、アクロバットリーダーのアプリのパスを指定して起動するもの。
パソコンの構成によっては、書き換える必要があります。
そこで、前回、デスクトップのパスを取得するのに使用した「Windows Script Host」を使って、アクロバットリーダーの実行ファイルである「Acrobat.exe」を起動し、ページ指定してPDFファイルを開きたいと思います。
そうそう、外部からPDFファイルを動かすとなると、有償版のアクロバットが必要なことが多いのですが、このコードは無償版のアクロバットリーダーで動作します!
VBAからアクロバットリーダーを起動させる
まずは、アクロバットリーダーを起動させるコードの紹介です。
ちなみに、和休のパソコンのアクロバットリーダーのバージョンは、2021.011.20039でした。
Sub Sample1() Dim wsh As Object Set wsh = CreateObject("WScript.Shell") wsh.Run ("Acrobat.exe") End Sub
アクロバットリーダーが起動したら、成功です。
(b^ー°)
VBAからページ指定してPDFファイルを開く
いよいよ本題です。
コマンドラインから4ページを指定してPDFファイルを開く場合、
「アクロバットリーダーのフルパス」 /a page=4 「開きたいPDFファイルのフルパス」
という記述で開きます。
これをVBAに応用します。
Fドライブの「PDFファイルを開く」という名前のフォルダにある「100ページあるPDF.pdf」の4ページ目を開く例です。
Sub Sample2() Dim wsh As Object Dim strTgTFLE '開けたいPDFファイルのフルパス Dim PG_NO As Long 'ページ番号 Dim wsh_CMD As String 'WSHに渡すコマンド Set wsh = CreateObject("WScript.Shell") strTgTFLE = "F:\PDFファイルを開く\100ページあるPDF.pdf" PG_NO = 4 '4ページを指定 'WSHに渡すコマンドを組み立てる wsh_CMD = "Acrobat.exe /a page=" & PG_NO & " " & strTgTFLE wsh.Run (wsh_CMD) End Sub
PDFファイルが開いて、4ページ目に移動したら成功です。
(b^ー°)
コメントをどうぞ!