Accessを利用して定期的にデータをCSV出力する処理をタスク実行します。
毎日または毎時、何らかのデータ連携や定型業務が必要な時に便利ですね。
タスクでAccessの処理を自動実行するにはAutoExecマクロを使います。
また、Access起動時に引数を設定することもできますので、Aの処理は1時間ごとに、Bの処理は1日毎に…という分岐も簡単です!
Accessをタスクから起動して処理を実行する方法
Accessをタスクから起動して処理を実行する概要
- AutoExec処理を記述
- Windowsのタスクに設定
AutoExec処理の記述
Access起動時に処理を実行させるためにはAutoExceマクロを作成します。
AutoExecマクロ
AutoExecという名前のマクロを作成し、処理させたい内容を記述します。
処理を記述した関数を作成し、AutoExecマクロから起動でもOKです!
アクション:プロシージャの実行
引数:プロシージャ名(以下の関数の場合は【AutoMain()】)※
※引数がなくても()の記述は必要です!
AutoExec呼び出し関数(AutoMain)作成
Function AutoMain() As Integer
MsgBox “ファイルを開きました”, vbOKOnly+vbInformation, “通知”
AutoMain = 1
End Function
上記のようなfunction()関数を作成します。
Sub()関数ではNGなので、Function()関数で作成し、戻り値(1)をセットしています。
Access起動時に引数(OpenArgs)を渡していればこの関数内で処理の分岐を設定することができます。
AutoExecを設定しているとファイルを開くと同時に処理が実行されます。
デバッグ中などの理由で処理を自動実行したくない場合はSHIFTキーを押しながらファイルを開くとAutoExec処理をスキップすることができます。
Windowsのタスクに設定
Winowsのタスクで定時にAccessが起動されるように設定します。
- 操作:プログラムの開始
- プログラム/スクリプト:(例)”C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE”
- 引数の追加(オプション):(例)”C:\tools\データ連携.accdb” /cmd “2”
※引数の赤字部分は任意です。引数には実行するaccessファイル名をフルパスで指定します。引数の指定方法については次の章で詳しく解説します。
トリガーには実行するスパンを設定します。
Access起動の引数を設定して処理を分岐する方法
CommandラインにAccessの引数を渡す
先の例にあったように、ACCESSを開く時、Commandラインで引数を与えることができます。
(例)C:\Program Files (x86)\Microsoft Office\Office12\MSACCESS.EXE C:\tool\test.accdb /cmd ABC
上記の例では、”ABC”という文字列をtest.accdbの起動時引数として設定するという意味です。
このような記述方法であれば、引数によってAccess起動時の挙動を分岐することができます。
Access起動時の引数による処理の分岐方法
引数として渡された値を参照できるのはCommand()関数です。
先の例で引数として渡された”ABC”という文字列は
Msgbox Command
このような形で取得することができます。
この関数を使えば、先のAutoExec処理内で、引数による処理の分岐が可能になります。
Function AutoExec() As Integer If Command="ABC" then MsgBox "ABCを引数にファイルを開きました", vbOKOnly+vbInformation, "通知" Else MsgBox "その他を引数にファイルを開きました",vbOKOnly+vbInformation, "通知" Endif AutoExec = 1 End Function
尚、/cmdを指定しなかった場合、Command()関数は長さ0の文字列(≠Null)を返します。
このため、上記のサンプルPGの場合はElseの分岐に入りますのでエラーにはなりません。
フォームを開くときの引数は以下のページをご確認くださいね↓
まとめ
Windowsタスクから定期的に処理できるようになると何かと便利です。
集計クエリを作っておいて、毎日決まった時間に決まったフォルダにデータをExportしたり、逆に特定のフォルダにあるデータを定期的に取り込んだり…。
出来ることが広がりますので是非試してみてくださいね!