- ベストアンサー
サブフォームに対する表示制御について
Access97でサブフォームを使用したフォームを作成しています。 サブフォームの明細行の最後に新規レコード行がありますよね。 サブフォームの初期表示時に、この新規レコード行にカーソルを位置付けたいのですが、 Docmd.GoTORecord,,acNewREc とやると、新規レコード行がサブフォームの 最上部にいってしまい、その前にある既存レコードが見えなくなってしまいます。 理想は、サブフォームの1ページが10明細分の大きさで獲ってあるとすると、 新規レコード行を10行目に表示されるようにもっていきたいのですが、 サブフォームに対してこのような制御は可能なのでしょうか。 RecordCountを操作したりしてやってみたのですが、既存レコードの件数によって、 うまくいったりいかなかったりです。 よろしくお願いします。
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
私も同じことで悩んだことがあります。そのときの結論ですが、 (1) 一番簡単なのは、 サブフォームのビューをデータシートにすれば新規レコードに移動しても10行表示されます。 (2) サブフォームのビューをを帳票にする必要があるなら、 DoCmd.GoToRecord , , acLast DoCmd.GoToRecord , , acPrevious, 9 DoCmd.GoToRecord , , acNewRec のように、一度9行前のレコードに行ってから、新規レコードに移動すれば、ちゃんと10行表示されます。 (なんだか裏技っぽくてスマートじゃないんで、自分では納得できてないんですが・・・) (3) 最後の9レコードより前を表示する必要が無ければ、 サブフォームのクエリーを SELECT ID, フィールド1, フィールド2,・・・・ FROM テーブル1 WHERE ID In (SELECT TOP 7 ID FROM テーブル1 ORDER BY ID DESC;) ORDER BY ID; のようにして、レコード数を新規も含めて10に限定してしまうのも一つの方法かと思います。 とりあえず (2) で用が足りるということでは、自信あり(経験済み)ですが、この方法がベストか? ということではちょっと自信なしです。
その他の回答 (1)
画面のちらつきを止めるには Application.Echo False 画面の更新処理 Application.Echo True とすれば良いと思います。
お礼
回答ありがとうございます。 早速試してみたところ、なるほどうまくいきました。 目からウロコ状態です。 まだまだ知らないメソッドがいっぱいあるなあと痛感... ありがとうございました。
お礼
お返事ありがとうございます。 実は、私も不本意ながら、(2)にやや近い方法で実験していたのですが、 あともう少しというところでうまくいかなかったりでした。 で、yoishoさんのいわれたようにやってみたところ、うまくいきました。 ちょっと1回余分にレコード移動しているので、 画面のチラツキが気になるところですが、しょうがないですね。 ありがとうございました。