最近、タスクスケジューラーからAccessのaccdbファイルやmdbファイルを開く設定をし、そのタスクでは起動引数を指定したのですが、いざタスクを実行してもAccessファイル側で引数を上手く受け取れないことがありました。
調べてすぐに原因はわかりましたが、せっかく調べたので記事にしてみます。
今回の記事では、タスクスケジューラーから起動引数を指定してAccessのaccdbファイルやmdbファイルを開くやり方を紹介していきます。
併せて、Accessファイルに起動引数を渡す基本的な説明と、タスクスケジューラーの使い方の説明も簡単にまとめます。
尚、現行のAccessで使用されているファイル形式の「accdb」と、古いファイル形式である「mdb」のどちらでも同じように動作するのを確認しております。
Accessファイルに引数を渡す一般的な方法
まずは、Accessのaccdbファイルやmdbファイルに対して、起動引数を渡す方法をおさらいします。
コマンドラインで起動引数をAccessに渡す
起動引数を渡してaccdbファイルやmdbファイルを開く場合は、対象のファイルをダブルクリックなどで開くのではなく、コマンドで開きます。
コマンドプロンプトを起動し、以下のようにコマンドを入力してEnterキーを押下することで、Accessファイルに引数を渡すことができます。
[Accessファイルのフルパス] /cmd [引数]
例えば、「C:\test\test.accdb」に対して、文字列”aaa”を引数として渡す場合は以下になります。
C:\test\test.accdb /cmd aaa
Accessに対して起動引数を渡す場合は、用意されている「コマンドラインスイッチ」のなかの「/cmd」を使用します。
Microsoft Office製品で用意されているコマンドラインスイッチの一覧は以下のリンク先でご確認ください。
起動引数をAccess側で受け取る
前項のコマンドラインスイッチの「/cmd」を使用して渡されてきた引数をAccess側で受け取るには、「Command関数」を使用します。
今回の例では、対象のaccdbファイルを開くと、自動的にフォームが開くように設定されていると仮定し、そのフォームのOpen時イベントに以下のように記述します。
Private Sub Form_Open(Cancel As Integer)
msgbox Command
End Sub
このように実装すると、このaccdbファイルに対して起動引数を渡して開くと、渡されてきた引数の文字列をメッセージボックスに表示します。
Command関数では、引数が渡されてこなかった場合は空の文字列を返します。
尚、この「Command関数」の簡単な使い方などは以下のリンク先をご確認ください。
このように、起動引数をAccessに渡すこと自体は非常に簡単です。
タスクスケジューラーで起動引数を渡す一般的な方法
当項では、タスクスケジューラーの使い方のおさらいとして、タスクスケジューラーで指定した実行ファイルなどに引数を渡す方法を紹介します。
尚、「タスクスケジューラーの使い方」については、当ブログの別の記事でまとめており、引数の渡し方も説明しています。
併せて以下のリンク先もご確認ください。
当記事でも、設定箇所を簡単に説明しておきます。
タスクスケジューラーの登録方法
「タスクの作成」画面から「操作」タブを選択し、「新規」ボタンを押下すると、「新しい操作」画面が起動します。
「設定」枠内の[プログラム/スクリプト]には、タスクスケジューラーに実行させたいファイルのフルパスを指定します。
ここは必須項目です。
その下の[引数の追加(オプション)]に、起動時に渡したい引数を指定します。
このように設定することで、起動対象の実行ファイルなどに引数を渡すことができます。
Access側で引数を受け取れるタスクスケジューラーの設定方法
Accessのaccdbファイルやmdbファイルを、タスクスケジューラーから引数を渡しつつ開きたい場合、直感的には以下のように登録したくなります。
設定項目 | 設定値 |
---|---|
操作 | プログラムの開始 |
プログラム/スクリプト | accdbやmdbファイルのフルパス |
引数の追加 | /cmd 渡したい引数 |
開始 | 必要によって設定 |
ただ、これではAccessファイルに対して引数は渡せません。
正しくは以下のように設定する必要があります。
設定項目 | 設定値 |
---|---|
操作 | プログラムの開始 |
プログラム/スクリプト | MSACCESS.EXEのフルパス |
引数の追加 | “accdbやmdbファイルのフルパス” /cmd 渡したい引数 |
開始 | 必要によって設定 |
よって、例えば冒頭で説明した例と同様に、「C:\test\test.accdb」に対象のAccessファイルを置いており、Microsoft 365 32bit版Accessを使用されている場合、「操作」の設定値は以下になります。
※MSACCESS.EXEの場所はインストール時の設定により異なる場合があります。
プログラム/スクリプト | “C:\Program Files (x86)\Microsoft Office\Root\Office16\MSACCESS.EXE” |
引数の追加 | “C:\test\test.accdb” /cmd aaa |
【補足】コマンドを記述したbatを作る方が簡単
前項では、タスクスケジューラーから直接accdbファイルやmdbファイルに起動引数を渡す方法を紹介しました。
タスクスケジューラーから直接開くことにこだわらなければ、引数を渡して開くコマンドを記述したbatファイルを作成し、そのbatファイルをタスクスケジューラーから実行する方が簡単です。
例えば、今回の記事の例としたファイル構成であれば、テキストファイルに以下のコマンドを記述して保存し、拡張子をbatに変更します。
C:\test\test.accdb /cmd aaa
このbatファイルのフルパスをタスクスケジューラーの「操作」設定内の「プログラム/スクリプト」で指定するだけです。
最後に
今回の記事では、accdbやmdbファイルに対して、タスクスケジューラーから起動引数を渡して開く方法を紹介しました。
尚、当ブログでは、過去に「Accessをバッチ処理として使う」記事を公開しており、その記事で紹介したように、Accessで作成した業務ツール内の処理を自動化する目的でタスクスケジューラーを使用していました。
良ければこちらの記事もご一読ください。
今回も読んでいただきましてありがとうございました。
それでは皆さまごきげんよう!