当サイトは、インターネットエクスプローラーのセキュリティを「高」、プライバシーを「すべてのCookieをブロック」にすると、サクサク表示され、クリックしても安全です。
ソホネット(宝塚/パソコン家庭教師・ホームページ作成運営代行・パソコン関連事務代行)
【ソホネット】FAQ:Access97/更新前処理でレコード更新日時を自動入力できない
質問
20061127
ACCESS97でデータベースを作っています。フォーム入力時に、レコードが少しでも変更されたら、「更新日時」というフォーム(テキストボックス)に、そのときの日時を「自動」で「入力」できるようにしたいと思い、いろいろとネットで検索して、いろんな記述を試しましたが、何度やってもうまくいきません。

Me![更新日時] = Now()Me![更新日] = Date()Me![更新日時] = NowMe![更新日] = Dateなど、ことごとく失敗しました。

ACCESS97以前は、VBAに対応していなかったというのもあり、やっぱり無理なのかと思い、

ボタンをクリックすると、現在の更新日時がフォーム(テキストボックス)に自動入力できるもの(これもVBAじゃないのか?)を使っています。

でも、入力や変更の時には、ボタンクリックをすぐに忘れてしまいますので、再度チャレンジしましたが、やはりうまくいきません。

現在の設定は以下のとおりです。

  • テーブル(表、つまりデータシート)でのデザイン設定
    • フィールド名:更新日時
      データ型:日付時刻型
  • フォームでのデザイン設定
    • 名前:更新日時
    • コントロールソース:更新日時
    • 使用可能:いいえ
    • 編集ロック:はい
    • 更新前処理
      • イペントプロシージャー
        • Private Sub 更新日時_BeforeUpdate(Cancel As Integer)
          Me![更新日時] = Now()
          End Sub
回答 Private Sub 更新日時_BeforeUpdate(Cancel As Integer)
Me![更新日時] = Now()
End Sub

この式では、「更新日時」というテキストボックス(フォームの一部)が変更された場合だけの設定になっています。

フォームとテキストボックスを同じものと考えておられるようですが、

  • フォームは「フォーム全体」のこと
  • テキストボックスは入力する白い部分のそれぞれ

を指しています。

これでは、同じフォーム内の他のテキストボックスを変更しても、何にも起きません。

解決法1

Private Sub 更新日時_BeforeUpdate(Cancel As Integer)
Me![更新日時] = Now()
End Sub

赤い更新日時の部分だけ([更新日時]はそのままか、[ ]を外すかする)を

Private Sub Form_BeforeUpdate(Cancel As Integer)
Me!更新日時 = Now()
End Sub

にする

解決法2

最初からやり直して(この記述を消して)、フォーム全体に更新前処理を設定すれば、うまくいきます。

  1. フォームを開いて、デザインビューをクリック
  2. 開いたフォームの中を一切クリックしないで(クリックした部分の変更になりますので)、
    • そのフォームのタイトルバーを右クリックして、プロパティを
    • または、ツールバーにある(プロパティ)をクリック
  3. 更新前処理のイペントプロシージャーを使って、次のように記述

Private Sub Form_BeforeUpdate(Cancel As Integer)
Me!更新日時 = Now()
End Sub

返信 うまくいきました。

入力や変更した後、次に移り、再度戻ると、無事に日時が入力されていました。

これで、すっきりしました。

今後は、フォームとテキストボックスを区別していきます。

ナビメニュー
 
累計