SendKeysメソッドとFolderfilelistでPDFを自動印刷できないか

最近は企業の「生産性」というものに注意が払われるようになってきました。要はいか

に少ない労力でより多くの成果をあげるかということですが、これは個人のレベルでも

業務のやり方の「改善」という形で多くの人が創意工夫してきたと思われます。

しかし現場の方たちの生産性は日本は世界の中でトップクラスと言われていますが、本

社で働いているような事務的な仕事をしている人たちの生産性は世界の国々と比較する

と燦燦たる有様のようです。

自分は経理としていくつかの会社でここまで何年か働いてきましたが、特にさぼってい

たわけではなく、むしろ「どうすればもっと速くミスなくできるようになるか」を常に

考えながら仕事をしてきました。

そのような意識の中で仕事をしながら見つけたのがエクセルのVBAです。エクセルの

VBAについての効果やすごさについては最近このブログでよく書いていきました。

最近はどうすれば「VBAを使って指定のPDFを一括して印刷できるか」を考えていまし

た。というのも、現在の仕事で時々上司から「○○の請求書のコピーを×月から△月ま

で印刷しておいて下さい」と言われるからです。

別に1枚や2枚だったら特に気にすることもないのですが、これが10枚や20枚になって

くると結構面倒になってきます。

今回はタイトルにもあるように、この請求書のPDFについて拙いながらも自分なりに

「SendKeysメソッドとfolderfilelistでPDFを自動印刷できないか」どうか考えてみた

ので、そのことについて今回は書いていってみます。

今回の記事の注意点として「できないか」と書いてあるので、自動印刷できるマクロ

ができたわけではありません。自動印刷するために自分がどんなことについて試行錯

誤してきたかについて書かれた内容です。

ちなみに自動印刷に「近い」ことは、次の記事で書こうと思っているので、そのよう

な前提で読んでいただければと思います。

指定のPDFを印刷するまでの手順と背景

事務的な職業をしている方でもそうでない人でもPDFを印刷したことがある人は多い

でしょう。PDFを印刷する時というのは、基本的に次のような手順になるかと思いま

す。ちなみにここではパソコンのデスクトップ上にPDFファイルがあると仮定します。

まず指定のPDFのファイルをダブルクリックして開く

開いたPDFファイルのメニューから「ファイル」を選択

ドロップダウンメニューから「印刷」を選択

開かれた印刷ダイアログボックスから「印刷」を選択

以上が大まかな流れかと思います。上に挙げた例はわかりやすいように非常に簡略化し

ました。実際の業務などでは印刷したいPDFはデスクトップ上にはなく、決まったフォ

ルダに格納されているのが普通かと思います。

また印刷するときも、その時の状況によって印刷ダイアログボックスから「どのページ

にするのか」といったことや「カラーか白黒か」といった点など、いろいろと変えなけ

ればいけない設定が出てくる場合もあります。

以上のような手順をエクセルのVBAで自動化できないものかと思いました。しかしPDF

というと、エクセルとは違うアプリケーションになります。正確にはAdobe Acrobat

Reader DCというアプリケーションになるわけですが。

もしかしたら何らかの方法があるかもしれないとインターネット上でいろいろと検索し

てみました。あるにはあるのですが、どれも自分が勉強してきたレベルでは理解できな

いような難しいコードです。

例えばShellオブジェクトのShellExecuteメソッドを使えばいいと書かれていても、自分

のようなVBAを勉強してから日が浅い初心者にはまだ理解するのが難しい。

それらのコードについて書かれたコメントや感想などを読んでみると実際難しいようで

す。自分なりにVBEにコードを打ち込んでいっていろいろいじって動作させようとして

もなかなか意図通りには動いてくれません。

もっと初心者でも簡単にPDFを自動で印刷できるコードはないものでしょうか。

自分としては、この面倒で単調な作業をどうしても自動化したかったので粘り強く調べ

てみたらもしかしたらこれはいけるんじゃないか?と思えるものがありました。

それがSendkeysメソッドというものです。

SendKeysメソッドとは

エクセルのVBAにおけるSendkeysメソッドとは、エクセルではなくエクセル以外の外

部アプリケーションなどにエクセルから指示が出せるコードです。

一般的なイメージでは、エクセルのVBAというとエクセルの機能のひとつなのでエクセ

ル上でしか動作させることができないと思いがちです。しかしそうではなく例えばエク

セルからでもワードとかエクセル以外のアプリケーションでもエクセルから動作させる

ことができるのです。

自分は最初このようなやり方があるのを知ったときは驚愕しました。「こんなやり方も

あるのか!?」と。詳しい内容についてはMicroSoftが以下のようなページを掲載して

います。

キーボードから入力したときのように、1 つ以上のキー ストロークをアクティブなウィンドウに送ります。

object.SendKeys(string)

引数

object
WshShell オブジェクトです。
string
送信するキーストロークを文字列式で指定します。

解説

SendKeys メソッドは、オートメーション インターフェイスを持たないアプ

リケーションにキーストロークを送信する場合に使用します。キーボードの

文字のほとんどは単一のキーで表現されます。キーボードの文字の中には、

Ctrl+Shift+Home などのように、いくつかのキーの組み合わせで表現され

るものもあります。キーボードの文字を 1 つ送信するには、その文字自身

を string 引数に指定します。たとえば、X キーを送信するには、string 引

数に文字列 “X” を指定します。

ShellオブジェクトとかOpenステートメント といったものは初心者には難しいかもし

れませんが、ショートカットキーの「Ctrl+P」などであれば難しくはないでしょう。

そういった動作をエクセルから外部アプリケーションに指示を送れるのが、Sendkeys

メソッドです。

例えばここまでPDFを印刷する手順について書いてきました。それをキーボードだけで

操作した場合どういった形になるでしょうか?それは以下のような形になります。

PDFファイルを選択してenterを押す

PDFファイルが画面上に表示されるので、Ctrl+Pのショートカットキーで印刷ダイアロ

グボックスが開く

印刷ダイアログボックスが開かれている状態でenterを押すと印刷が実行される

Alt+F4でPDFファイルを閉じる

どうでしょうか。どのページを印刷するかといった特に込み入った設定が必要なければ

、マウスを操作しなくてもキーボード上のキーだけでPDFファイルを印刷することがで

きます。

自分はこのやり方をエクセルからVBAを通してPDFへ指示を送れないかを試してみまし

た。

コメント

  1. どどんき より:

    FolderFileListの作成者のどどんきです。
    FolderFileListを使用していただきありがとうございます。

    お礼が言いたくコメントをさせていただきました。
    これからもFolderFileListをよろしくおねがいします。

  2. 管理者 より:

    >どどんき様
    コメントありがとうございます。
    どどんきさんの「FolderFileList」には仕事でとてもとても助けられました。
    ありがとうございます。