TextBox.BeforeUpdate イベント (Access)

BeforeUpdate イベントは、コントロールまたはレコードで変更されたデータが更新される直前に発生します。

構文

BeforeUpdate (Cancel)

TextBox オブジェクトを表す変数。

パラメーター

名前 必須 / オプション データ型 説明
Cancel 必須 整数型 (Integer) BeforeUpdate イベントが発生したかどうかは、設定によって決まります。 引数 CancelTrue (1) に設定すると、BeforeUpdate イベントが取り消されます。

注釈

"SetValue/値の代入" アクションが記述されたマクロまたは Visual Basic で、コントロールに含まれるデータを変更した場合は、このイベントは発生しません。 別のレコードに移動するか、レコードを保存したときに、フォームに対して BeforeUpdate イベントが発生します。

このイベントが発生したときにマクロまたはイベント プロシージャを実行するには、 BeforeUpdate プロパティをマクロの名前または [イベント プロシージャ] に設定します。

このイベントは、オプション グループに格納されているチェック ボックス、オプション ボタン、およびトグル ボタンには適用されません。 オプション グループに対してのみ適用されます。

BeforeUpdate イベントは、コントロールまたはレコードが更新されるときに発生します。 レコード内では、コントロールがフォーカスを失ったとき、またはユーザーが Enter キーまたは Tab キーを押すと、各コントロールの変更されたデータが更新されます。フォーカスがレコードから離れたとき、またはユーザーが [レコード] メニューの [レコードの保存] をクリックすると、レコード全体が更新され、データがデータベースに保存されます。

フォームのコントロールに新しいデータまたは変更されたデータを入力し、別のレコードに移動するか、[レコード] メニューの [レコードの保存] をクリックしてレコードを保存すると、フォームの AfterUpdate イベントは、コントロールの AfterUpdate イベントの直後に発生します。

別のレコードに移動すると、コントロールの Exit イベントと LostFocus イベントが発生し、その後に移動したレコードの Current イベントと、このレコードの最初のコントロールの Enter イベントと GotFocus イベントが発生します。 Exit マクロおよび LostFocus マクロまたはイベント プロシージャを実行せずに AfterUpdate マクロまたはイベント プロシージャを実行するには、[ レコード ] メニューの [ レコードの保存 ] をクリックしてレコードを保存します。

コントロールに対する BeforeUpdate マクロまたはイベント プロシージャは、コントロールのデータが変更された場合にのみ発生します。 このイベントは、演算コントロールの値が変更された場合には発生しません。 フォームに対する BeforeUpdate マクロまたはイベント プロシージャは、レコード (コントロール) のデータが変更された場合にのみ発生します。

フォームでは、 BeforeUpdate イベントを使って、別のレコードに移動する前にカレント レコードの更新を取り消すことができます。

コントロールに新しい値を入力しても、データを保存するまで、つまりレコードが更新されるまでは、 OldValue プロパティの値は変更されません。 更新を取り消すと、コントロールで変更したデータの値が OldValue プロパティの値に戻されます。

BeforeUpdate イベントは、特に次のような複雑な入力検査を行う場合、データの入力検査によく使われます。

  • フォームの複数の値を対象とする入力検査
  • 入力されたデータによって異なるエラー メッセージを表示する入力検査
  • ユーザーが無視できる入力検査
  • 他のフォームのコントロールへの参照や、ユーザー定義関数が含まれる入力検査

注:

[!メモ] 簡単な入力検査を行う場合、またはフィールドへの入力要求を行ったりフォーム上で複数のコントロールを検査するなどのより複雑な入力検査を行う場合には、各コントロールの " ValidationRule /入力規則" プロパティと、テーブルのフィールドやレコードの " ValidationRule /入力規則" および " Required /値要求" プロパティを使って入力検査を実行することができます。

イベントのプロシージャで BeforeUpdate イベントを発生したコントロールに含まれるデータを変更しようとすると、実行時エラーが発生します。

次の例では、BeforeUpdate イベント プロシージャを使用して、製品名が既にデータベースに入力されているかどうかを確認する方法を示します。 ユーザーが ProductName ボックスに製品名を入力すると、値は Products テーブルの ProductName フィールドと比較されます。 Products テーブルに一致する値がある場合、製品が既に入力されていることをユーザーに通知するメッセージが表示されます。

次の使用例の実行結果を確認するには、ProductName という名前のテキスト ボックスが配置された Products という名前のフォームに対し、次のイベント プロシージャを追加します。

Private Sub ProductName_BeforeUpdate(Cancel As Integer) 
 If(Not IsNull(DLookup("[ProductName]", _ 
 "Products", "[ProductName] ='" _ 
 & Me!ProductName & "'"))) Then 
 MsgBox "Product has already been entered in the database." 
 Cancel = True 
 Me!ProductName.Undo 
 End If 
End Sub

サポートとフィードバック

Office VBA またはこの説明書に関するご質問やフィードバックがありますか? サポートの受け方およびフィードバックをお寄せいただく方法のガイダンスについては、Office VBA のサポートおよびフィードバックを参照してください。