【Access】OpenArgsでフォームを開く引数に複数の値を渡したい

当ページのリンクには広告が含まれています。
フォーム引数渡し
  • URLをコピーしました!

Access VBAではDocmd.OpenFormでフォームを開く際、引数として開く側のフォームに値を渡すことができます。

連続した処理をしたい場合、主キーを渡したり呼び出し側で入力した値を渡したりなど活用する機会は多いかと思います。

今回は複数の値を渡したかったので、いっそ配列で渡せないかと思ったのですが無理でしたね(笑)

引数の形式は文字列型です。

ただし、文字列を特定の文字区切りで作成することで開いた先のフォームで配列として展開して使えます。

今回はOpenArgsの使用方法について解説します。

目次

DoCmd.OpenForm

まずはフォームを開く基本のコードです。

基本の構文

DoCmd.OpenForm フォーム名, ビュー, フィルター名, WHERE句, データモード, ウィンドウモード, 引数

パラメータ

パラメータの定義は以下の通りです。

フォーム名フォーム名を文字列で指定します。

例:”Formテスト”:ダブルクォート囲み

ビュー以下の定数のいずれを指定。指定しない場合はacNormalが適用されます。
  • acNormal(デフォルト):フォームビュー
  • acDesign : デザインビュー
  • acPreview :印刷プレビュー
  • acFormDS: データシート ビュー
  • acFormPivotChart:ピボットグラフ ビュー
  • acFormPivotTable:ピボットテーブル ビュー
  • acLayout:レイアウトビュー
フィルター名カレントデータベースのクエリーの名前 ← 使ったことないです
WHERE句WHERE句を指定します。WHEREの記述は不要です。

例:”商品名 LIKE ‘りんご*'”

データモードフォームを開いたときのデータのモードを以下の定数から指定します。
  • acFormAdd:レコード追加モード
  • acFormEdit:既存のレコード編集・レコードを追加モード
  • acFormPropertySettings:(デフォルト)フォームのプロパティ変更モード
  • acFormReadOnly: レコード参照のみモード
ウィンドウモードフォームを開くときのウィンドウのモードを以下の定数から指定します。
  • acDialog:作業ウィンドウ固定・ポップアップモード
  • acHidden:非表示モード
  • acIcon:最小化モード
  • acWindowNormal:(デフォルト) フォームのプロパティで設定されたモード
引数文字列式で指定。

今回設定するのはパラメータ「引数」です。

引数渡しの利用方法

呼び出し側のフォーム

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 を指定した場合はすべての文字列を含んだ配列を返します。(省略した場合も同様)

比較モード比較モードを以下の定数から指定します。
  • vbBinaryCompare:バイナリ モード
  • vbTextCompare:テキストモード
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次