電子書籍の厳選無料作品が豊富!

フォームが開いただけでCurrentイベント(レコード移動時)が発生してしまうのですが
これを回避する方法はありますか?

IF文などを設けるしかないのでしょうか?
そもそもフォームを開いただけでカレントレコードが移動してるのでしょうか?

A 回答 (2件)

> そもそもフォームを開いただけでカレントレコードが移動してるのでしょうか?



「フォームを開くことで初めて最初のレコードが表示が表示される」という意味では、
「無→先頭」ということで移動しています、という説明はできるのですが・・・
実際には、Accessでは(・・・で、いいんですよね?(汗))、レコードソースが設定されていない
「非連結フォーム」でもCurrentイベントが発生してしまいますので、
「フォームの展開時に発生する」のは「仕様」として捉えた方がいいのかもしれません(汗)
(もしかしたら「テーブルやフィールドが何も定義されていないレコードセットが開かれている」
 という解釈なのかも・・・?)


> IF文などを設けるしかないのでしょうか?

そういうことになるかと思います。
データベースウィンドウ(テーブルやフォームの一覧が表示される画面)や、別フォームから
DoCmd.OpenFormなどで開くのみなら(注:下記「※」参照)、「Me.Visible」で判定
できます。

Private Sub Form_Current()

  'フォーム展開時はCurrentイベントの処理を実行しない
  If Me.Visible = False Then Exit Sub

  'レコード移動時の処理(ここではMsgBoxで代用)
  MsgBox "Currentイベントの処理を実行します。"

End Sub


※フォームのデザインビューからフォームビューに切り替えた場合は、Visible=Trueとなる
  ため、Currentイベントの処理が実行されてしまいます。
    • good
    • 0
この回答へのお礼

説明不足ですいません。アクセス2003です。
なるほど。「無→先頭」へ移動ということですか。
仕様ということで割り切ります。
どうもありがとうございました。

お礼日時:2009/12/06 15:30

No.1です。



改めて考えてみたのですが・・・「レコード移動時」という言葉にとらわれすぎていた
かもしれません(汗)

英語、或いはVBAでは「Current」(プロパティ名としてはOnCurrent)となって
いますので、直訳すれば「現在」、意訳で「現状」程度になるかと思います。

つまり、フォームを開くとき、及びレコード移動の際には、表示データの「現状確認」
(→連結コントロールならレコードのデータの確認、非連結コントロールなら初期値
(DefaultValueプロパティの値を含めて))が行われます。
この、「フォーム単位での表示内容の確認・更新」が行われるときに発生するのが
「Current」イベントだと考えれば、フォームの展開時とレコードの移動時でそれぞれ
このイベントが発生するのも妥当ということになるのではないでしょうか。

※元々が「Current」プロパティと「CurrentRecord」という紛らわしく思える名前が
  使われているところに、「レコード移動時」の和名(?)で、私も完全にレコード関連
  のものと誤解していましたが(汗)、「現状確認時」といった名前の方がふさわしかった
  のかもしれません。
    • good
    • 0
この回答へのお礼

確かに「レコード移動時」という和訳が混乱の元ですね。
詳しい説明ありがとうございます。参考になりました。

お礼日時:2009/12/06 23:15

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!