Bar

Access 2013 コマンドライン スイッチを使って帳票を自動印刷する方法~起動後のマクロ実行

WordやExcel等Office製品を使用し、何らかの帳票を印刷する場合は少なくないと思います。
手動で[データ入力]→[帳票を印刷]する事は誰でも出来ますが、人が介在するとデメリット(特に、ヒューマン・エラー)が必ず付きまといます。
そこで、日報など定期的に使う[帳票]を自動印刷出来るか、調べてみました。
今回はAccess 2013を使っています。

通常起動と自動起動で処理を分けたいんです!

今回の記事を書いた理由は
  1. 通常起動の場合
    ユーザが、任意のタイミングで、何らかの処理を実行する
  2. コマンドライン スイッチ付きの場合
    決まった時間に起動し、自動で、何らかの処理を実行する
のような起動方法によって処理を分けたいと考えています。
2番の処理を従業員等に任せる手ももちろんあります。
複数人が処理できるようお願いをすると、人によって品質がバラバラになる可能性があります。
ある人はきっちり実施していただけていますが、特定人物だけ
  • パラメータ設定は間違える!
  • 印刷時間を守らない!
等の運用リスクが増大する危険性がありますから・・・
※そうならないような対策が必要になりますよね。

Accessで帳票を自動実行する方法

さて本題です。
下記手順にそって帳票を自動実行してみました。
大きく分けて、3つのパートに分かれます。
1.VBAの処理
  1. 標準モジュールに自動実行用プロシージャを作る
    登録できるプロシージャは、Function プロシージャのみです
    Sub プロシージャは使えませんので注意しましょう。
    image
  2. 帳票レポートを印刷するスクリプトを記入
    DoCmd.OpenReport 帳票レポート名, acViewNormal
    を記入し、帳票レポートを起動→即時印刷します。
    上記画像ではPrintPeport(xxx)の
  3. 処理後の動作を記入
    帳票印刷後にAccessを閉じる必要があります。
    DoCmd.Quit
私は、DoCmd.Quit前にSleep関数(別途Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)を追記)を処理させています。
印刷データをスプーラに渡してしまえばアプリケーション プロセスを終了していいと思いますが、念のためです。
2.通常画面の処理
  1. [作成]タブをクリック、[マクロ]ボタンをクリック
    image
  2. [新しいアクションの追加]から[プロシージャの実行]を選択
    image
  3. VBAで作成したFunction プロシージャを入力、指定する
    下はサンプルで、[AutoPrint]というFunction プロシージャが候補として上がります。
    なお、Sub プロシージャは候補に挙がってきません。
    image
  4. マクロを保存
    [AutoExec]等、任意のマクロ名を入力し保存します。
3.自動実行登録
  1. 自動実行用ファイルを作成
    記述は下記の通り。
    xxxx.accdb /x マクロ名
    これは、xxx.accdbの起動後、/xの後に記述したマクロ名を実行します。
  2. タスク スケジューラに登録
    任意の時間に1.を実行します。
    なお、プログラムの開始ウィザードは下記のように設定しました。
    ★プログラム/スクリプト
    C:\Program Files (x86)\Microsoft Office\Office15\MSACCESS.EXE
    ★引数の追加(オプション)
    xxxx.accdb /x AutoPrint

/cmd スイッチも使えます!

今回はマクロを実行する/xスイッチを紹介しましたが、/cmdスイッチもあります。
/cmdスイッチ付きで起動すれば、各種処理を振り分けて行う事ができます。
また、Form_Openイベントと組み合わせる事で/xと同じことができました。
更に便利になりそうです!
Command 関数
上記リンクはAccess 2007版です。
Access 2013の[コマンド ライン引数]の設定場所は
[オプション]→[クライアントの設定]
になりますのでご注意ください。
2013-10-29_144220

その他コマンドライン スイッチ

その他にも使えるコマンドライン スイッチがあります。
Access のコマンド ライン スイッチ
余談:Windows Print Spoolerの仕組み
前述でSleep関数を入れた理由を書きましたが、よく考えるとWindowsの印刷を管理する「Print Spoolerサービス」についてあまり知らないなと。
Windows Print Spoolerの仕組みは、日本マイクロソフト DDK/WDK サポートチームのブログ記事で非常に詳しく説明されています。
印刷時のスプーリングについて - Japan WDK Support Blog
印刷時のスプーリングについて(2) - Japan WDK Support Blog
なお、DDK/WDKと聞いた事がない言葉がありますが、WikiPediaによると、どちらも「ドライバ開発キット」とのこと。SDKは知ってましたが・・・
DDKはMicrosoft Driver Development Kit、WDKはWindows Driver Kit。
Windows VistaまではDDK、現在はWDKのようです。
余談:Excelにもコマンドライン スイッチがあります。
Excelにもコマンドライン スイッチはあります。
しかし、Accessのようにコマンドライン スイッチによる任意のマクロを実行する事は出来ません。
そういう用途のアプリケーションではない!という事でしょうかね。
Excel のコマンド ライン スイッチ