Access覚書 引数を引き渡して起動

Access起動時にパラメータを引き渡し、
渡されたパラメータによって処理をかえる方法。

起動スイッチというのがあるらしい。

参照:Microsoft Office 製品のコマンド ライン スイッチ

ということで

"C:¥.........¥MSACCESS.EXE" "......accdb" /cmd "para1" "para2" "para3" ...

順に
Accessのexe 起動するAccessファイル /cmd パラメータ(必要分)
をそれぞれダブルクォーテーションで括って設定するのが重要らしい。

そして、Access側のVBAはこの引数を引き取って処理を行う。

Command関数
参照:Microsoft Support Command関数

このようにパラメータで渡された文字列は、AutoExecマクロ内で処理をすることにする。

  1. マクロを追加 名称は「AutoExec」にする
  2. 作ったマクロに「プロシージャの実行」を追加し、3.で作成するFunctionプロシージャ名を記載する
  3.   ex) RunProc() ← 必ず()をつける

  4. ここからVBA
  5. 標準モジュールを追加して、2.のマクロで実行させるFunctionプロシージャを追加する
      ex) Function RunProc() …. End Function
    Functionでないとダメで、SubだとCommandを認識しなかった。

  6. 3.のFunctionプロシージャ内に引数を使った処理を記載する
  7.    Function RunProc()
           ' Trimを忘れずに.これはパラメータが複数の時なので1つしかない時は、Trim(Command())でOK
           Dim cmd() As String
           cmd = Split(Trim(Command()), " ")     
           ' 1つめの引数で処理を分岐
           Select Case cmd(0)
           Case "para1"
              ' ここに処理
           Case "paraX"
              ' ここに処理
           Case Else
              ' ここに処理
           End Select
       End Function
    

<注意点>
Command関数の結果は必ずTrimすること。起動コマンドで””で括っているが後ろにスペースが入って渡ってくる。

起動コマンドで最初にexeを指定したくない、ランタイム起動でも問題ない、という場合は、

"......accdb" /runtime /cmd "para1" "para2" "para3" ...

と、/runtimeを挟むと、exeの指定をせずにCommandが引き渡され、処理が走る。


んで、次。
もう1つ別のやり方があるのだが、それは /x スイッチ。

"......accdb" /runtime /x "macro1" /cmd "para1" "para2" "para3" ...

という感じにすると、
/x の後ろに入れたマクロ「macro1」を実行させられるようになる。
で、さっきと同じくプロシージャの実行をマクロに追加して、実行させるFunctionプロシージャを指定する。
VBA側は下記のようにしてパラメータを読み込んでおけばいい。

   Function RunMacro1()
       Dim cmd() As String
       cmd = Split(Trim(Command()), " ")
       ' ここに処理
   End Function

このやり方だと、わざわざ分岐処理を書く必要がないので、見た目が良いかなと思ったりする。


さて、最後。
起動コマンドからランタイム実行(/runtime 付)させたときに、AutoExecは走らせたくないなぁって思ったら、
AutoExecで動くFunction(またはSub)内の先頭に、こういう1文を先頭に入れておくといい。

If SysCmd(acSysCmdRuntime) Then Exit Function

普通に起動させたときは後続処理が走るが、ランタイム起動させたときはプロシージャを抜けるようにしておくこともできるわけだ。

奥が深いぜ、Accessさんよぉ

※ランタイム:Accessから開発機能(フォーム、クエリ、レポート、VBAの作成編集機能)を除いたもの

Add a Comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください