- ベストアンサー
AccessVBAデータシートビューの挙動について
- Access2003を使用して、メインフォームにサブフォーム(データシートビュー:表)を組み込み、一覧表を作成しています。
- プログラムコード上で、実行ボタンを押すとデータシートの全行にあるAAAというテキストに一つ前の行の値をセットする処理を行っています。
- フォーカスがあたるためか、データシートビューの最後の行までフォーカスが移動してしまい、スクロールが発生しています。スクロールをさせずにデータをセットする方法を探しています。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
たぶん意味を図りかねる、ということかもしれませんが。 テキストボックスを一つ、ボタンを一つ追加して、 テキストボックスの名前を txData とし、 ボタンを cmdデータ入力 とします。 http://oshiete1.watch.impress.co.jp/qa6997668.html のNo2の(2)の Private Sub cmd行移動_Click() Private Sub cmd列指定_Click() の二つのプロシージャを一緒にします。 Dim bk As Variant は設定してあれば必要ありません。 以下です。 Option Compare Database Option Explicit Dim bk As Variant Private Sub cmdデータ入力_Click() '移動先の行 Dim rs As Recordset Dim i As Long Set rs = Me.埋め込み0.Form.RecordsetClone If rs.RecordCount > 0 Then 'ブックマークを先頭レコードに移動 rs.MoveFirst bk = rs.Bookmark If Me.txPosition > 0 Then If Not rs.EOF Then rs.Move Nz(Me.txPosition - 1) If Not rs.EOF Then 'サブフォームの表示をカレントレコードに移動 '以下のコメントアウトをオフにすればレコードの移動が見えます。 'bk = rs.Bookmark Me.埋め込み0.Form.Bookmark = bk If Not IsNull(Me.txRow.Value) Then i = Me.txRow.Value - 1 If i >= 0 And i <= rs.Fields.Count - 1 Then MsgBox "カレントレコードの指定された列の名前は " & rs.Fields(i).Name MsgBox "カレントレコードの指定された列の値は " & rs.Fields(i).Value If Not IsNull(Me!txData) Then MsgBox "データを入力します" rs.Edit rs.Fields(i).Value = Me!txData rs.Update MsgBox "カレントレコードの指定された列の名前は " & rs.Fields(i).Name MsgBox "カレントレコードの指定された列の値は " & rs.Fields(i).Value End If End If End If End If End If End If End If rs.Close: Set rs = Nothing End Sub 操作は、 txPosition に行の位置を入れて txRow に列の位置を入れて、 txData にデータを入れて Private Sub cmdデータ入力_Click() を実行します。
その他の回答 (1)
- piroin654
- ベストアンサー率75% (692/917)
どうでもいいことでけど、 http://oshiete1.watch.impress.co.jp/qa6997668.html のわたしの回答をまともに読んでいないような気がしますが。 No3の txPosition に行の位置を入れて cmd行移動 を クリックすると、見た目のレコード選択と カレントレコードを一致させます。 これを見れば、No2の(2)の Private Sub cmd行移動_Click() '見た目のレコード選択とカレントレコードを一致させる Dim rs As Recordset Dim l As Long Set rs = Me.埋め込み0.Form.RecordsetClone If rs.RecordCount > 0 Then 'ブックマークを先頭レコードに移動 rs.MoveFirst bk = rs.Bookmark If Me.txPosition > 0 Then If Not rs.EOF Then rs.Move Nz(Me.txPosition - 1) If Not rs.EOF Then 'サブフォームの表示をカレントレコードに移動 bk = rs.Bookmark Me.埋め込み0.Form.Bookmark = bk End If End If End If End If rs.Close: Set rs = Nothing End Sub の、 'サブフォームの表示をカレントレコードに移動 bk = rs.Bookmark のところで、 bk = rs.Bookmark をコメントアウトすれば、レコードのフォーカスは 指定した位置にあるということが一目瞭然ですが。 つまり、サブフォームのスクロールを生じさせずに 位置を指定できるといことです。 そのあたりを、三つのボタンクリック時のイベントで 示したのですが、サンプルを作って確認してみたら どうですか。
お礼
ありがとうございます。 レコードセットを使わずに実装しようとしていた為、 解釈不足でした。申し訳ございません。 現在手元に、対象のソースがないため、 参考にサンプルを新規作成してみました。 対象のソースも説明してくださった内容を参考に 一から作り直してみたいと思います。 ありがとうございました。