Access VBAではDocmd.OpenFormでフォームを開く際、引数として開く側のフォームに値を渡すことができます。
連続した処理をしたい場合、主キーを渡したり呼び出し側で入力した値を渡したりなど活用する機会は多いかと思います。
今回は複数の値を渡したかったので、いっそ配列で渡せないかと思ったのですが無理でしたね(笑)
引数の形式は文字列型です。
ただし、文字列を特定の文字区切りで作成することで開いた先のフォームで配列として展開して使えます。
今回はOpenArgsの使用方法について解説します。
DoCmd.OpenForm
まずはフォームを開く基本のコードです。
基本の構文
DoCmd.OpenForm フォーム名, ビュー, フィルター名, WHERE句, データモード, ウィンドウモード, 引数
パラメータ
パラメータの定義は以下の通りです。
フォーム名 | フォーム名を文字列で指定します。
例:”Formテスト”:ダブルクォート囲み |
---|---|
ビュー | 以下の定数のいずれを指定。指定しない場合はacNormalが適用されます。
|
フィルター名 | カレントデータベースのクエリーの名前 ← 使ったことないです |
WHERE句 | WHERE句を指定します。WHEREの記述は不要です。
例:”商品名 LIKE ‘りんご*'” |
データモード | フォームを開いたときのデータのモードを以下の定数から指定します。
|
ウィンドウモード | フォームを開くときのウィンドウのモードを以下の定数から指定します。
|
引数 | 文字列式で指定。 |
今回設定するのはパラメータ「引数」です。
引数渡しの利用方法
呼び出し側のフォーム
DoCmd.OpenForm “Frm商品マスタ”, , , , , , “りんご”
コマンドボタンのクリックイベントやメッセージボックスのOKボタンクリックなど、フォームを開きたいイベントにOpenFormメソッドを記述します。
呼び出されたフォーム
Private Sub Form_Open(Cancel As Integer) '引数の有無によってメッセージを出し分ける If IsNull(Me.OpenArgs) Then MsgBox "引数なし" Else MsgBox Me.OpenArgs End If End Sub
呼び出されたフォーム側ではForm_OpenイベントにてOpenArgsを取得し何らかの処理を実行します。
サンプルではメッセージボックスに引数の文字列を出力しています。
引数なしで起動される場合もあるときは、IsNull()関数で引数があるか否か事前にチェックします。
複数の値を渡す場合の取得方法
複数の値を引数として渡したい場合は各値を固定の文字で連結してOpenArgsに渡します。
呼び出し側のフォーム
DoCmd.OpenForm “Frm商品マスタ”, , , , , , “りんご,みかん,ぶどう”
引数にりんご・みかん・ぶどうの3つの文字列を渡したい場合、カンマ(,)などの区切りの記号で各文字列を結合した文字列を渡します。
呼び出されたフォーム
Private Sub Form_Open(Cancel As Integer) Dim strFruit As Variant Dim strMsg As String '引数がNULLでなければテキストボックスにそれぞれの文字列をセットする If not IsNull(Me.OpenArgs) Then 'カンマ区切りで文字を分割し配列にセット strFruit = Split(Me.OpenArgs, ",", , vbTextCompare) '各テキストボックスに値をセット Me.txt果物1 = strFruit(0) Me.txt果物2 = strFruit(1) Me.txt果物3 = strFruit(2) End If End Sub
呼び出されたフォーム側ではForm_Openイベントにて取得したOpenArgsをSplit関数を使うことで区切り文字で分割し配列として取得します。
サンプルでは取得した配列の要素を1つずつテキストボックスに代入しています。
Split関数
基本の構文
Split(分割したい元の文字列, 区切り文字, 配列数,比較モード)
パラメータ
- パラメータの定義は以下の通りです。
分割したい元の文字列 | 文字列と区切り文字を含む文字列を必ず指定します。
空文字(長さ0の文字列)を渡した場合、Split関数は空の配列を返します。 |
---|---|
区切り文字 | 区切り文字を指定します。カンマ(”,”)やダブルコロン(“:”)などの区切り文字を指定します。
省略した場合、区切り文字としてスペース(” “)が使用されます。 |
配列数 | 返す配列の要素数を指定します。
-1 を指定した場合はすべての文字列を含んだ配列を返します。(省略した場合も同様) |
比較モード | 比較モードを以下の定数から指定します。
|