ExcelVBAのWebBrowserとsetZoomScrollでPDFの表示位置を調整する方法

業務で何らかの処理をする時に、PDFを表示させて見る箇所がいつも同じだった、なんてことはないでしょうか。

 

PDFで何らかの帳票から数値や文字列を確認して、エクセルに入力していくなどの処理のために、毎回指定のPDFファイルをダブルクリックして開いて、毎回マウスでスクロールしたり縮小拡大させるのは面倒くさいでしょう。

 

それが1つや2つであればいいですが、毎回数十、数百といった数を処理する場合、気が滅入ります。少しでも業務を改善したい、楽にしたいと考えた時に最初からPDFの表示位置が調整されていたら毎回数百回分のマウスのスクロールをしなくても済むようになります。

 

今回はそれを実現するためのExcelVBAのコードを整理していってみます。

ExcelVBAのWebBrowserとsetZoomScrollでPDFの表示位置を調整するコード

結論から先に書くと次のコードになります。確認した動作環境はExcel2013です。

Private Sub CommandButton1_Click() 
Dim P As Object
Set P = WebBrowser1.Document
P.setZoomScroll 100, 200, 150
End Sub

上記のコードを解説すると、フォームモジュールにWebBrowserコントロールとコマンドボタンを設置します。そのコマンドボタンのクリックイベントでWebBrowserを通してPDFの表示される位置が記述したコードの位置に表示されるようになっています。

 

2行目でオブジェクト型の変数Pを宣言、3行目でオブジェクト変数としてWebBrowserコントロールを格納。4行目のsetZoomScrollメソッドでPDFの表示位置を調整しています。

 

少し補足すると、事前にInitializeイベントなどでWebBrowserコントロールのNavigateメソッドでPDFを表示できるようしておく必要があります。

 

setZoomScrollメソッドの引数は自分が確認できている範囲だと3つあります。1つ目の引数は「表示倍率」です。引用したコードの最初の引数は「100」とありますが、これはPDFの表示倍率が100%という意味になります。

 

基本的に100%が標準サイズでそれよりも拡大して見たい場合は、200、300に増やしていきます。縮小して見たい場合は、90、80という風に数値を小さくしていきます。

 

2つ目と3つ目の引数はPDFを表示する位置の「座標」になります。2つ目の引数がX軸、3つ目の引数がY軸を指定します。起点はWebBrowserに表示されたPDFの左上になります。

 

Excelにおける座標の単位はポイント(1ポイントは約0.35ミリ)で表されるので、2つ目の引数に200、3つ目の引数に150と入力するとPDFの一番左上の部分から右方向(X軸)に7cm、下方向(Y軸)に5.25cm進んだ位置が表示されることになります。

 

つまり上記のコードは、コマンドボタンを押すとWebBrowserに表示されているPDFの表示倍率が100%になり、右方向に7cm、下方向に5.25cmスクロールされた箇所が表示されることになります。

 

今回はコマンドボタンを使って表示位置を調整できるようなコードを書きましたが、別にUserForm_Initializeで最初からPDFの表示される位置が指定の箇所になるようにしてもいいですし、PDFを切り替える度(スピンボタンを利用した場合など)に表示位置が調整されるようにすることもできます。

 

使う人が使いやすい形のコードに変えていけるのが一番良いと思います。

 

ちなみに、ExcelVBAには「WebBrowser」というコントロールがあり、そのコントロールの追加・設定方法、さらに「Set P = WebBrowser1.Document」というコードを利用するとWebBrowserコントロールを通してPDFを操作できる点については以下の過去記事でも触れています。

WebBrowserコントロールでPDFを操作できるようになるまでに試してみたコード

今回引用したコードはすごく簡単に見える気がしますが、このコードに辿り着くまでに非常に苦労しました。

 

まず「情報自体が少ない」という状態でした。ExcelVBAであればメジャーなプログラミング言語なので関連書籍もたくさん出ていますし、インターネットでも簡単に多くの情報を探し出すことが出来ます。

 

一方ExcelVBAからPDFを操作する情報というのは非常に少ないです。まずそういった本自体も見たことがない(探せばあるかもしれません)ですし、インターネット上でもなかなかわかりやすい情報がなかったので、四苦八苦して自分の手を動かすという方法を取らざるを得ませんでした。

 

WebBrowserコントロールを格納したオブジェクト変数を通してPDFを操作できるようにする方法を思いつく前は、例えば大きく分けて次のようなコードで試行錯誤してました。

  1. Image1.Picture = LoadPicture(“○○○”)
  2. WebBrowser1.Document.Body.Style &= “;Zoom:200%”
  3. WebBrowser1.Document.Body.runtimeStyle.Zoom = “150%”

上記3つのコードについて、試行錯誤しながら気づいたことを順番に説明していってみます。

コメント