読者です 読者をやめる 読者になる 読者になる

株式会社クイックのWebサービス開発blog

HAPPYなエンジニア&デザイナーのブログです

タスクスケジューラ&AutoExecマクロを使ってAccess自動実行化を試してみた

Access Windows

こんにちは。sanamekoです。きのこでは一番舞茸が好きです。

データ周りの仕事をすることが多いので、Microsoft Accessをよく使っています。

ちょっとしたデータの更新や抽出の依頼は、笑顔で引き受けている(つもりの)私です。
しかし、エライ人の「このレポート毎週出力してよ~」という鶴の一声によって、ちょっとした依頼が定例作業と化したときは、さすがに笑顔が引きつってしまいます。

このつまらない定例作業、何とかできないものかと試行錯誤し、AccessのAutoExecマクロと、Windows機能のタスクスケジューラを組み合わせたところ、作業がとってもラクに、というか作業をしなくて済むようになりました。
というわけで、今回は、「Access自動実行化」をご紹介します。

基本編

例として、以下のようなとてもシンプルな処理を行ってみます。
・テーブル[T_果物]のレコードを全件出力
・出力はExcel形式で
・指定したフォルダに出力
・毎週水曜日の12時に出力

1.AutoRunマクロ作成[Access

Accessでマクロを新規作成し、実行させたい処理を設定します。
f:id:aimstogeek:20151124184355j:plain

下記2つは、自動実行用のための設定です。

  • マクロ名は「AutoExec」(このマクロ名にすることで、起動時に自動的に処理を開始するようになります。)
  • マクロ処理の最後に「Accessの終了」を設定
2.タスクを作成[タスクスケジューラ]

タスクスケジューラを起動し、タスクを新規作成します。

「トリガー」画面
・毎週水曜日の12時に起動するように設定
f:id:aimstogeek:20151124185350j:plain

「操作」画面
・プログラム/スクリプト:MSACCESS.EXEのフルパスを指定
・引数の追加:実行したいaccdbファイルを指定
f:id:aimstogeek:20151124185408j:plain

設定は以上です。
PCの電源さえつけていれば、指定した時間に勝手に処理をし、勝手にファイルを吐き出してくれます!

応用編その1

マクロでの処理は、手軽ではありますが、出来ることに限りがあります。
プロシージャに処理を記述することで、処理の幅が広がります。

この例では、先ほどと同じく、「AutoExec」マクロを作成します。
そこで、プロシージャ「AutoExec_Module_1」を呼び出す処理を設定します。(このプロシージャ名は何でも構いません。)
f:id:aimstogeek:20151124184400j:plain

呼び出すプロシージャには、下図のように処理内容を記述します。
(ここでもたいした処理はやっていませんが・・・)
f:id:aimstogeek:20151124185316j:plain

あとは先程と同様、Accessを起動させるようなタスクを作成すればOKです。

応用編その2

タスク登録したタイミング以外にも、例えば「月末に処理を行いたい」など、手動で処理を行いたいときがあるかもしれません。
しかし、今までご紹介した方法だと、Accessを手動で起動したときにも、勝手に処理が始まってしまいます。

そこで、タスクスケジューラでの設定時に「引数」を指定することで、タスクスケジューラから起動したのか、手動で起動したのかを判断し、処理を制御することができます。

タスクスケジューラの「引数の追加」で、accdbファイルの後に[ /cmd *]と入力します。(*は引数)
下図の例では、引数として「1」を指定しています。
f:id:aimstogeek:20151124203314j:plain

この引数は、Accessの起動時に[Command]という変数に格納されます。
Accessを手動で起動したときは[Command]には何も値が入りません。
これを利用して、『[Command]が空のとき、プロシージャ内の処理を行わない』という分岐をさせます。
f:id:aimstogeek:20151124205058j:plain

また、上図のコードのように、引数の値によって処理内容を変えたりもできます。

以上、いくつか例をご紹介しましたが、簡単な設定だけでできますので、
Accessを使った定例作業が多い方は、是非試してみてください!