#648 | フォームに複数のOpenArgsを渡すには? | フォーム、VBA | |
フォームのボタンをクリックしたときなどに、別のフォームを開いたりレポートを開いたりする際、次のようなコードを実行することによって、それらのフォームやレポートに引数を渡すことができます。 DoCmd.OpenForm "フォーム2", , , , , , "あいうえお" 一方、それを受け取った側のフォームやレポートでは、次のようにフォームなどの「OpenArgs」プロパティの値を見ることでそれを扱うことができます。 Private Sub Form_Load() MsgBox Me.OpenArgs End Sub しかし、このOpenArgsの引数はひとつだけです。そのままでは複数の情報を渡すことはできません。 そのようなとき、たとえば「,(カンマ)」で区切られた複数の情報をひとつの文字列に組み立てることで、OpenArgsひとつに複数の情報を指定することができます。 またそれを受け取った側のフォームでは、
もちろん、呼び出す側と受け取る側でルールが決められていれば、コロン区切り、セミコロン区切り、Tab区切り、何でもかまいません。 ※データ自体にそれらの区切り文字が含まれていないことが前提となります。 次の例では、5つのテキストボックスに入力されているデータをひとつのOpenArgsにまとめて別のフォームに渡しています。 また受け取り側のフォームでは、OpenArgsを分解してそれぞれを同様の5つのテキストボックスに代入し、画面表示しています。 ※いずれのフォームもテキストボックスの名前は「データ1、データ2......、データ5」です。 ■呼び出し側フォームのモジュール Private Sub cmd別フォーム_Click() '[別のフォームを開く]ボタンクリック時 Dim strOpenArgs As String '別フォームに渡す引数を組み立てる With Me strOpenArgs = !データ1 & "," & !データ2 & "," & !データ3 & "," & !データ4 & "," & !データ5 End With '別のフォームをダイアログで開く DoCmd.OpenForm "フォーム1", , , , , acDialog, strOpenArgs End Sub Private Sub Form_Load() 'フォーム読み込み時 Dim avarOpenArgs As Variant Dim iintLoop As Integer 'OpenArgsをカンマごとに分解して配列に格納する avarOpenArgs = Split(Nz(Me.OpenArgs), ",") '配列の要素ごとにテキストボックスに代入する For iintLoop = 0 To UBound(avarOpenArgs) Me("データ" & (iintLoop + 1)) = avarOpenArgs(iintLoop) Next iintLoop End Sub ※Split関数は、第1引数の値を、第2引数に指定された文字で区切って、分解結果を配列として返す関数です。
※Split関数の第1引数をNz関数に通しているのは、もしOpenArgsが空だった場合のエラーを回避するためです。 ※実際にはどのようなデータが渡されるか分かりませんので、テキストボックスに代入する前にいろいろなチェックや置き換え、データ型変換などが要るかもしれません。 実行例: |
|||
|
Copyright © T'sWare All rights reserved |