Access

AccessをWindowsタスクから起動して定型処理を実行する方法

記事内に商品プロモーションを含む場合があります

Accessを利用して定期的にデータをCSV出力する処理をタスク実行します。

毎日または毎時、何らかのデータ連携や定型業務が必要な時に便利ですね。

タスクでAccessの処理を自動実行するにはAutoExecマクロを使います。

また、Access起動時に引数を設定することもできますので、Aの処理は1時間ごとに、Bの処理は1日毎に…という分岐も簡単です!

Accessをタスクから起動して処理を実行する方法

Accessをタスクから起動して処理を実行する概要

  1. AutoExec処理を記述
  2. Windowsのタスクに設定

AutoExec処理の記述

Access起動時に処理を実行させるためにはAutoExceマクロを作成します。

AutoExecマクロ

AutoExecという名前のマクロを作成し、処理させたい内容を記述します。

処理を記述した関数を作成し、AutoExecマクロから起動でもOKです!

※引数がなくても()の記述は必要です!

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の分岐に入りますのでエラーにはなりません。

フォームを開くときの引数は以下のページをご確認くださいね↓

フォーム引数渡し
【Access】OpenArgsでフォームを開く引数に複数の値を渡したいAccess VBAにて複数の値を引き継いで次のフォームを開きたいケースがあります。OpenFormの引数には1つの文字列しか渡せませんが、受け取った側のフォームで配列にすることはできます。簡単なサンプルをご紹介します。...

スポンサーリンク

まとめ

Windowsタスクから定期的に処理できるようになると何かと便利です。

集計クエリを作っておいて、毎日決まった時間に決まったフォルダにデータをExportしたり、逆に特定のフォルダにあるデータを定期的に取り込んだり…。

出来ることが広がりますので是非試してみてくださいね!

ABOUT ME
アズビーパートナーズ
プログラマー→社内SE→SIerのお仕事をしています。 メーカー勤務を経て、中小企業の社内SE、フリーランスなど様々な形態で働いてきました。 業務上生まれた困った…を解決してきたTipsを備忘録も兼ねて公開しています。 困っている誰かのお役に立てれば幸いです。