【Access】フォームレコードごとにPDFページ単位で読み込ませる簡単な方法

access

Accessで用紙の内容を転記入力する、は今も昔もよくある業務です。
しかし最近はテレワークになったことをきっかけに出社時にPDFにスキャン、テレワーク中はPDFを見ながらAccessへ入力するような事もよくある話しなのではないでしょうか。

実際自分がこれをやってみた結果、、Accessフォームのレコード送りをしてAcrobatReaderも次ページをクリックして… と超入力がめんどくさい!
ということで、AccessフォームにPDFを無理矢理?読み込ませる方法ができたので、紹介してみます。(なぜ「無理矢理」なのかは一番最後を参照ください)

1.AccessファイルとPDFフォルダは同じ場所に配置

わかりやすくするためです。別フォルダにしたい場合は後のソースコードを編集したらOKです。
ここからの手順は既存のAccessフォームのファイルのフォーム内の改造でも対応できるかと思います。PDFファイルが多数あっても対応可能なものになっています。

2.テーブルとフォームを作る

まず上記画像のようにテーブルを適当に作ります。
そして上記画像のようにフォームを用意します。
ポイントは「Webブラウザーコントロール」を使うことです。つまりPDFをブラウザ機能でURL扱いでPDFを読み込ませるという方法ですね。(ググっても情報ほとんどなかったので、こんなやり方している人はたぶん少ない…)

ファイル名、ページ数、ついでに倍率というテキストボックスも作っておきます。

倍率はあえてテーブル項目せず規定値で数字を入れておきます。紙のサイズやスキャン時の都合でPDFの見た目がバラバラの可能性があるので、手動で調整できるようにです。

3.VBAソースをかきます

Private Sub Form_Current()

Dim PDFname, PDFno As String
PDFname = Application.CurrentProject.Path & "\" & ファイル名t
PDFno = ページ数t

Me.Webブラウザー0.ControlSource = "='" & PDFname & "#page=" & PDFno & "&zoom=" & 倍率t & "'"

End Sub

「レコード移動時」のイベントプロシージャで記述します。

ファイル名tとページ数tはフォームのテキストボックス名です。

ざっくり解説すると…
現在のAccessファイルのフォルダ内にある入力されたPDFファイルを
htmlリンクでPDFをブラウジングで、ページ数指定&倍率指定 をしています。

 

4.事前にテーブルにファイル名とページ数を入れておく

フォームごとに入力はめんどいので、事前にテーブルから入力しておきます。

数が多い場合はいったんEXCELで編集で、ファイル名とページ数のデータを、
セルコピーやオートフィルでページ分の行数分先に入れておくテーブルを作成し、
インポートやコピペでテーブルに戻せばラクになりますね。

5.完成です。入力効率はともかくラクです!


PDFの読み込みが秒単位ですが地味に時間がかかったりしますが
ウィンドウ切り替えてぽちぽち作業や重複入力や誤入力などのミスも大幅に改善されました!
1画面で表示されているものをどんどん入力してけるので、紙を見て入力よりらくちんですね。

ただ上にもかいたようにPDFの読み込みが時間がかかったりするので、1レコード数秒で入力できるようなフォームの場合は、入力スピードは早くはならないかもしれません。

さいごに注意点!

acrobatのエラーがでる。0:521エラー

このエラーは、Acrobatの起動のセキュリティが原因みたいです。

AcrobatReaderを起動し、編集⇒環境設定⇒セキュリティ(拡張)⇒「起動時に保護モードを有効にする」のチェックを外してOKで、改善すると思われます。

読み込み回数が多くなると定期的にメモリエラーがでる

PC環境やPDFのサイズや種類によると思われますが、メモリエラーがでます・・・。
Access自体を一度終了し、もう一度起動したら改善されます。(PCまで再起動はしなくてOK)
私が確認したものだとメモリ8GBのPC環境で60~100回ぐらい読み込むと定期的にエラー出ます。
いちいちエラーごとに終了する手間はありますが、AcrobatとAccessを両方ぽちぽちする手間を考えればと割り切って使い続けています。
今後改善策がわかれば、この記事に追記していこうと思います。

今回の記事は以上です。

コメント