HOME > 即効テクニック > AccessVBA > データ操作 > フォームを開いてレコードを移動する

即効テクニック

データ操作

フォームを開いてレコードを移動する

(Access 2000/2002/2003)
●概要●
構文  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イベントが発生しないので、単にフォームにフォーカスが移動するだけで、レコードの移動は実行されません。