手動で[データ入力]→[帳票を印刷]する事は誰でも出来ますが、人が介在するとデメリット(特に、ヒューマン・エラー)が必ず付きまといます。
そこで、日報など定期的に使う[帳票]を自動印刷出来るか、調べてみました。
今回はAccess 2013を使っています。
通常起動と自動起動で処理を分けたいんです!
今回の記事を書いた理由は- 通常起動の場合
ユーザが、任意のタイミングで、何らかの処理を実行する - コマンドライン スイッチ付きの場合
決まった時間に起動し、自動で、何らかの処理を実行する
2番の処理を従業員等に任せる手ももちろんあります。
複数人が処理できるようお願いをすると、人によって品質がバラバラになる可能性があります。
ある人はきっちり実施していただけていますが、特定人物だけ
- パラメータ設定は間違える!
- 印刷時間を守らない!
※そうならないような対策が必要になりますよね。
Accessで帳票を自動実行する方法
さて本題です。下記手順にそって帳票を自動実行してみました。
大きく分けて、3つのパートに分かれます。
1.VBAの処理
- 標準モジュールに自動実行用プロシージャを作る
登録できるプロシージャは、Function プロシージャのみです。
Sub プロシージャは使えませんので注意しましょう。
- 帳票レポートを印刷するスクリプトを記入
DoCmd.OpenReport 帳票レポート名, acViewNormal
を記入し、帳票レポートを起動→即時印刷します。
上記画像ではPrintPeport(xxx)の - 処理後の動作を記入
帳票印刷後にAccessを閉じる必要があります。
DoCmd.Quit
印刷データをスプーラに渡してしまえばアプリケーション プロセスを終了していいと思いますが、念のためです。
2.通常画面の処理
- [作成]タブをクリック、[マクロ]ボタンをクリック
- [新しいアクションの追加]から[プロシージャの実行]を選択
- VBAで作成したFunction プロシージャを入力、指定する
下はサンプルで、[AutoPrint]というFunction プロシージャが候補として上がります。
なお、Sub プロシージャは候補に挙がってきません。
- マクロを保存
[AutoExec]等、任意のマクロ名を入力し保存します。
3.自動実行登録
- 自動実行用ファイルを作成
記述は下記の通り。
xxxx.accdb /x マクロ名
これは、xxx.accdbの起動後、/xの後に記述したマクロ名を実行します。 - タスク スケジューラに登録
任意の時間に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の[コマンド ライン引数]の設定場所は
[オプション]→[クライアントの設定]になりますのでご注意ください。
その他コマンドライン スイッチ
その他にも使えるコマンドライン スイッチがあります。Access のコマンド ライン スイッチ
余談:Windows Print Spoolerの仕組み
前述でSleep関数を入れた理由を書きましたが、よく考えるとWindowsの印刷を管理する「Print Spoolerサービス」についてあまり知らないなと。Windows Print Spoolerの仕組みは、日本マイクロソフト DDK/WDK サポートチームのブログ記事で非常に詳しく説明されています。
印刷時のスプーリングについて - Japan WDK Support Blogなお、DDK/WDKと聞いた事がない言葉がありますが、WikiPediaによると、どちらも「ドライバ開発キット」とのこと。SDKは知ってましたが・・・
印刷時のスプーリングについて(2) - Japan WDK Support Blog
DDKはMicrosoft Driver Development Kit、WDKはWindows Driver Kit。
Windows VistaまではDDK、現在はWDKのようです。
余談:Excelにもコマンドライン スイッチがあります。
Excelにもコマンドライン スイッチはあります。しかし、Accessのようにコマンドライン スイッチによる任意のマクロを実行する事は出来ません。
そういう用途のアプリケーションではない!という事でしょうかね。
Excel のコマンド ライン スイッチ