帳票フォーム・データシートフォームで連続したレコードの値を取得する
  帳票形式・データシート形式のフォームで、連続した複数のレコードを選択
した場合のフィールドの値を取得する方法を説明します。

● 準備 ●

(1) テーブル[テーブル1]を用意し、以下のようなサンプルデータを入力します。
      名前(テキスト型)
        A
        B
        C
        D

(2) オートフォーム、フォームウィザードで[テーブル1]をレコードソースにし
    たデータシート形式のフォーム[フォーム1]を作成します。
    その際、必ずレコードセレクタを [はい] にしておいて下さい。

(3) フォームのCurrent/レコード移動時イベントに、以下のプロシージャを記
    述します。

● サンプル ●

'フォーム移動時のイベント
Private Sub Form_Current()
    Dim Frm     As Form
    Dim rsClone As DAO.Recordset
    Dim iTop    As Integer
    Dim iRecNum As Integer
    Dim iLoop   As Integer

    'オブジェクト変数に使用フォームを代入
    Set Frm = Me

    'レコードセット作成
    Set rsClone = Me.RecordsetClone
    rsClone.MoveFirst

    '複数選択されたレコードの先頭レコード位置とレコード数を取得
    iTop = Frm.SelTop
    iRecNum = Frm.SelHeight

    '行を選択していない場合と新規レコードの場合は処理中止
    If iRecNum = 0 Or Me.NewRecord = True Then
        Exit Sub
    End If

    '先頭レコードに移動
    rsClone.Move iTop - 1

    '必要なフィールドをメッセージボックスで表示
    For iTop = 1 To iRecNum
        MsgBox rsClone![名前]
        rsClone.MoveNext
    Next

    '強制的に新規レコードに移動
    DoCmd.GoToRecord acDataForm, "フォーム1", acNewRec

    '終了処理
    rsClone.Close
    Set rsClone = Nothing
End Sub

● 動作確認 ●

  フォームをデータシートビューに変更し、任意のレコードセレクタからマウ
スをドラッグして複数レコードを選択します。
  すると、選択したレコードの名前フィールドの値が、順に表示されます。


● 詳細 ●

  サンプルではSelTopプロパティで選択された複数のレコードの先頭位置を取
得し、SelHeightプロパティで選択されたレコード数を取得しています。
  そこで取得した情報を元に、レコードセットクローンのカレント位置を移動
させています。
  その時、SelTopプロパティが1から始まるのに対し、レコードセットのレコー
ド番号は0から始まりますので、変換に際しては注意が必要です。

  また、フォームのCurrent/レコード移動時イベントを使用しているため、す
でにフォーカスがあるレコードを基点に選択した場合、イベントが発生しない
ため、最後に強制的に値取得後に新規レコードにカーソルを移動しています。


● 補足説明 ●

  Access2000の場合、デフォルトではDAOに参照設定されていません。
  Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、
Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
  その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOの
チェックを持ってきて下さい。

Access97/2000



戻る


Excel Word Access VBA! モーグ