即効テクニック |
●概要● 構文 expression.OpenArgs 取得のみ 設定項目 内容 expression Formオブジェクト[省略可能] 自身のフォームを開いたときのOpenFormメソッドの引数に指定された文字列を示します。 を省略すると、自身のFormオブジェクトを指定したことになります。 このプロパティは、OpenFormメソッドを実行するプロシージャと組み合わせて使用します。次の例では、まず、「顧客入力フォーム」にある[顧客一覧フォームへ]ボタンのClickイベントプロシージャで、現在の「顧客NO」を引数 に指定して、「顧客一覧フォーム」を開きます。これによって、「顧客一覧フォーム」のOpenArgsプロパティに「顧客NO」が設定されます。 ●サンプル● 'フォームを開いてレコードを移動する 1 '顧客一覧フォームを開き、特定のレコードに移動する Private Sub cmd顧客一覧_Click() If IsNull(顧客NO) Then '新規入力画面でClickイベント発生の場合 DoCmd.OpenForm "顧客一覧フォーム" Else '既存レコードでClickイベント発生の場合 DoCmd.OpenForm "顧客一覧フォーム", , , , , , 顧客NO.Value End If End Sub 次に、「顧客一覧フォーム」のOpenイベントプロシージャで、OpenArgsプロパティ値を元に「顧客NO」を検索し、目的のレコードにフォーカスを移動します。 'フォームを開いてレコードを移動する 2 '顧客一覧フォームを開き、特定のレコードに移動する Private Sub Form_Open(Cancel As Integer) 'OpenArgsプロパティがNullでなければ If Not IsNull(Me.OpenArgs) Then 'カレントフィールドを移動 DoCmd.GoToControl "顧客NO" '目的のレコードに移動 DoCmd.FindRecord Me.OpenArgs End If End Sub ●実行結果● 顧客入力フォームで「顧客NO」を指定して、[顧客一覧フォームへ]ボタンをクリックする。顧客一覧フォームが自動的にスクロールして、指定した「顧客NO」のレコードが表示される。 ●注意● レコードを移動するためのFindRecordメソッドは、フォームのOpenイベントプロシージャに記述しています。すでに「顧客一覧フォーム」が開いている状態で実行した場合は、Openイベントが発生しないので、単にフォームにフォーカスが移動するだけで、レコードの移動は実行されません。