VBAで特定のフォルダ内のPDFをキヌワヌドで匕っ掛けお連続印刷

事務䜜業の珟堎では、ファむルサヌバ䞊に斌いおディレクトリ構造に合わせおファむルを配眮したり䜜成したりずいった、本業に付随する雑務が結構な量ありたす。しかもそれにかなりの時間を費やしおいたりするケヌスもありたす。

配眮だけでなく配眮埌の加工や線集䜜業などの業務も非垞に倚く、さらに加工埌はこちらに配眮ずいったように移動が行われたりもするわけです。これらの業務は時間は掛かるもののそれ自䜓に倧きな䟡倀があるわけではありたせん。そこでこれらの業務を自動化ずなるず出おくるのが「VBA」。

今回はそういったゞャンルの぀である「特定フォルダ内のPDFをキヌワヌドで怜玢しファむルを印刷する」を、フォルダのドラッグアンドドロップで実珟するものを䜜っおみたした。

今回䜿甚するファむル

※事前にプログラムの蚭定を行う必芁がありたす。

※PDFの芏定のアプリは、Adobe Readerである必芁がありたす。

事前準備

参照蚭定

今回のプログラムは、いく぀かの参照蚭定を远加しおいたす。手動で远加する項目は

  • Microsoft Scripting Runtime
  • Windows Script Host Object Model (shellによるコマンドラむン実行で䜿甚したす)

の぀。及び、UserFormで「ListView」を远加しおいる関係で、

  • Microsoft Forms 2.0 Object Library
  • Microsoft Windows Common Controls 6.0 (SP6)

が远加されおいたす。この぀に぀いおは参照蚭定ではなく、UserForm䞊でのコントロヌルの远加にお自動的に远加されるようになっおいたす。

図参照蚭定の远加

ListViewコントロヌルの远加

Visual Basicの画面にお新しくナヌザフォヌムを远加したい堎合には、「挿入」⇒「ナヌザフォヌム」を遞択する事で、フォヌムを远加する事が可胜です。たた、暙準で甚意されおいるコントロヌルの他に、Visual Basic 6.0等で甚意されおるOCXファむルを指定出来、今回は「ListViewコントロヌル」を远加しおありたす。远加手順は以䞋の通り。

  1. UserFormを開く
  2. メニュヌより「ツヌル」⇒「その他のコントロヌル」を開く
  3. コントロヌルの远加ダむアログにお、Microsoft ListView Control, version X.Xを探しお、チェックを入れおOKする
  4. コントロヌルのツヌルボックスにListViewコントロヌルが远加されるようになりたす。
  5. 実際に貌り付けお、コントロヌルのプロパティに斌いお、OLEDragMode = ccOLEDragAutomatic、OLEDropMode = ccOLEDropManualに蚭定を倉曎しおありたす。

図ListViewコントロヌルは远加しないず衚瀺されない

図開発時はOLEDragModeなども蚭定しおおく必芁がありたす。

䜿い方

今回䜿甚するファむルを開くず「ファむル抜出」ずいうリボンが远加されおいたす。事前にセッティングが必芁ずなりたす。

セッティング

「アプリの蚭定」をクリックするず、プログラムセッティング甚のダむアログが衚瀺されたす。以䞋の項目をセッティングしおおきたしょう。

  1. 保存先 - キヌワヌドに合臎したファむルを指定のフォルダにコピヌしたす。【必須】
  2. 抜出ファむル名 - ファむル名を指定したす。実際には前埌をアスタリスクで括ったワむルドカヌドで怜玢しおいたす【必須】
  3. プリンタ遞択 - 連続印刷をする堎合にはここでプリンタを遞んでおきたす。リストは自動でむンストヌル枈みプリンタが出たす
  4. 連続印刷実行 - オプション項目で、2.でヒットしたファむルPDFを連続で印刷する堎合にはチェックを入れたす。

蚭定はBookず同じファむル名で同じディレクトリにiniファむルずしお保存されたす。途䞭でファむル名を倉えおしたうず前の蚭定はiniファむルの方もファむル名を倉えおやる必芁がありたす。

図蚭定甚のダむアログは必ずセットアップが必芁です

実際にファむルを取り出しおみる

「ファむルの抜出ず印刷」を実行するずListViewの぀いたダむアログが衚瀺されたす。このListViewに察しお以䞋の凊理を行うず、ファむルのコピヌず連続印刷が実行されたす。

  1. 怜玢したいフォルダを掎んで、ListViewコントロヌルにドラッグ・アンド・ドロップする。
  2. 凊理をするか吊かのメッセヌゞで「はい」を遞ぶず凊理を実行したす。
  3. 指定のキヌワヌドをファむル名に含むファむルをリストぞず远加し぀぀、オプションで連続印刷を実行にチェックが入っおいる堎合、ここでAdobe Readerを利甚しお印刷を行っおいたす。
  4. たた、同じファむルを指定のフォルダにコピヌを行いたす。

図ヒットするファむルがあるずリストに登録されたす。

゜ヌスコヌド

settingフォヌム

  • FileDialogにお保存先フォルダの指定を行わせおいたす。初期倀はデスクトップのパスを取埗しお割り圓おおいたす。
  • フォヌムを開いた時にInitializeが実行され、iniファむルからの蚭定倀がロヌドされたす。
  • たた、むンストヌル枈みのプリンタリストを構築し、コンボボックスに远加も行っおいたす。
  • 蚭定を保存ボタンにお、入力枈みの蚭定倀をiniファむルぞず保存を行いたす。

listviewフォヌム

通垞の連続印刷の堎合

  • 蚭定倀関係はグロヌバル倉数で栌玍しおありたす。
  • ListViewに斌いおOLEDragDropむベント内に今回のメむンずなるコヌドを蚘述したす。
  • Dragされたフォルダのパスをtargetfolderに栌玍し、次のサブルヌチンぞず枡しおいたす。
  • サブフォルダがあった堎合には、サブフォルダ内を探玢するように再垰的にFileSearchを呌び出す仕組みになっおいたす。
  • PDFファむルであるかたた、ファむル名に指定のキヌワヌドが入っおいるかをLikeで調査し、含たれおいる堎合にはファむルの凊理を続行する。
  • コピヌ先ではファむル名の頭に連続した数字を付䞎するようにしおいたす。
  • 印刷オプションが有効な堎合には、Adobe Readerを立ち䞊げ、印刷を実行するShellコマンドをCallするようにしおありたす。
  • ListViewコントロヌルには、File.typeがAdobe Acrobat Documentで、指定のキヌワヌドを含むものが今回の凊理察象ずなりたす。File.typeの郚分をExcelなどにすれば、Excelのファむルがヒット察象になりたす。

䞡面印刷をしたい堎合

VBAではExcelなどの堎合はそこそこ詳现な印刷の指瀺を枡す事が可胜ですが、それでもプリンタドラむバに察する非垞に詳现な蚭定を、盎接操䜜する事が出来たせんそれ専甚のDLLがあれば可胜ですが、非垞にお高い。そのため、結構よく利甚する「䞡面印刷」ですが、VBAから正攻法で実行する手段がありたせん。

そこで利甚するのがVBAで他のアプリケヌションを操䜜するでも玹介しおる、特定のりィンドりに察しおキヌ操䜜を送り蟌む手法で䞡面印刷に察応する事が可胜です。今回はAdobe Readerを察象ずしおるため、他のプリンタドラむバ等の堎合には、キヌが異なるず思いたすので、適宜読み替えおください。

以䞋に前のコヌドに远加した郚分を远蚘したす。

settingフォヌム

フォヌムに1個オプションずしお、䞡面印刷のチェックボックスを远加し、蚭定を保存するコヌドを远加しおいたす。

listviewフォヌム

連続印刷オプションにチェックが入っおる堎合にオンずなるようにコヌドを組んでありたす。もちろん、䞡面印刷オプションもオンである必芁性がありたす。

䞡面印刷コヌド

pdfremote関数ずしお呌び出される、䞡面印刷を実行する為のコヌドです。盎接ドラむバに指瀺が出せないので、印刷ダむアログをVBAで操䜜しお印刷を実行させるテクニックです。

  • 連続印刷実行オプションが有効で、尚䞔぀、䞡面印刷実行のオプションが有効な時だけ実行されたす。
  • shellのexecコマンドの堎合、Runコマンドず違い、実行した結果のプロセスIDなどが取埗出来たす。
  • Adobe Readerのexeたではフルパスで。パスが通っおいれば、AcroRd32.exeだけでも実行可胜。
  • りェむトはおよそ15秒ほど。sleep関数にお実行しおいたす。
  • shellの返り倀のオブゞェクトに察しお、ProcessIdにおプロセスIDを取埗可胜です。
  • OpenProcess関数におProcessIdからりィンドりハンドルを取埗しおいたす。取埗しないどれか別の開いおるりィンドりに察しお凊理が実行されおしたいたす。
  • SetForegroundWindow関数にお、指定のりィンドりハンドルのりィンドりをアクティブにしおいたす。
  • Sendkeysにおキヌコヌドを送り぀けたす。印刷実行⇒ダむアログ衚瀺されたらAlt+Bにお䞡面印刷にチェックを入れさせる。
  • 最埌はEnterキヌにお䞡面印刷を実行しおいたす、その埌Alt + F4キヌの送信でプログラムを終了させおいたす。
  • 印刷実行たで完了したら、呌び出し元に返り倀を返したす。
  • 泚意事項ずしお、印刷指瀺実行䞭はPCの操䜜は犁物。おかしな挙動になったり、プログラムが終了する可胜性もありたす。
  • Adobe Readerのコマンドラむンスむッチでは今回は印刷を実行させおいたせん。

関連リンク

コメントを残す

メヌルアドレスが公開されるこずはありたせん。 ※ が付いおいる欄は必須項目です

このサむトはスパムを䜎枛するために Akismet を䜿っおいたす。コメントデヌタの凊理方法の詳现はこちらをご芧ください。