您可以使用 CancelEvent 巨集指令,取消導致 Access 執行包含此巨集指令之巨集的事件。 巨集名稱是事件屬性的設定,諸如 BeforeUpdate、OnOpen、OnUnload 或 OnPrint 等。
附註: Access Web 應用程式不提供 CancelEvent 巨集指令。
設定
CancelEvent 巨集指令沒有任何引數。
註解
在表單中,您通常會在驗證巨集中搭配 BeforeUpdate 事件屬性使用 CancelEvent 巨集指令。 當使用者在控制項或記錄中輸入資料,Access 會在新增資料至資料庫前先執行巨集。 如果資料未通過巨集中的驗證條件,則 CancelEvent 巨集指令會在更新程序開始前將其取消。
一般而言,您會將此巨集指令與 MsgBox 巨集指令搭配使用,以指出資料未通過驗證條件,並提供關於應該輸入之資料類型的有用資訊。
下列事件可由 CancelEvent 巨集指令取消。
ApplyFilter |
Dirty |
MouseDown |
BeforeDelConfirm |
Exit |
NoData |
BeforeInsert |
Filter |
Open |
BeforeUpdate |
Format |
|
DblClick |
KeyPress |
Unload |
Delete |
附註: 將 CancelEvent 巨集指令與 MouseDown 事件搭配使用時,只能取消以滑鼠右鍵按一下物件時所發生的事件。
如果控制項的 OnDblClick 事件屬性設定指定了包含 CancelEvent 巨集指令的巨集,則該巨集指令會取消 DblClick 事件。
如果是可以取消的事件,事件的預設行為 (也就是 Access 通常會在事件發生時執行的動作) 會在事件的巨集執行後才發生。 如此可讓您取消預設行為。 例如,在文字方塊中按兩下插入點所在的單字時,Access 通常會選取該單字。 您可以在 DblClick 事件的巨集中取消此預設行為,並執行一些其他的動作,例如,開啟含有文字方塊內資料之相關資訊的表單。 如果是無法取消的事件,則預設行為會在巨集執行前發生。
附註: 如果表單的 OnUnload 事件屬性指定了執行 CancelEvent 巨集指令的巨集,您將無法關閉該表單。 您必須更正導致執行 CancelEvent 巨集指令的條件,或是開啟巨集並刪除 CancelEvent 巨集指令。 如果表單是強制回應表單,您將無法開啟巨集。
若要在 Visual Basic for Applications (VBA) 模組中執行 CancelEvent 巨集指令,請使用 DoCmd 物件的 CancelEvent 方法。
範例
藉由使用巨集來驗證資料
下列驗證宏會檢查在供貨商窗體中輸入的郵遞區號。 它會顯示 StopMacro、 MsgBox、 CancelEvent 和 GoToControl 動作的使用方式。 條件式表達式會檢查在窗體上記錄中輸入的國家/地區和郵遞區號編碼。 如果郵遞區編碼格式不適合國家/地區,宏會顯示消息框,並取消儲存記錄。 接著,它會將您傳回 [郵遞區號] 控制項,您可以在此處修正錯誤。 這個宏應附加至供貨商窗體的 BeforeUpdate 屬性。
條件 |
動作 |
引數:設定 |
註解 |
IsNull([CountryRegion]) |
StopMacro |
如果 CountryRegion 為 Null,則無法驗證郵遞區號。 |
|
[CountryRegion] In ("法國","義大利","西班牙") And Len([郵遞區號]) <> 5 |
MsgBox |
訊息:郵遞區號必須為 5 個字元。 嗶嗶聲:是 類型:資訊 標題:郵遞區號錯誤 |
如果郵遞區號不是 5 個字元,則會顯示一則訊息。 |
... |
CancelEvent |
取消事件。 |
|
GoToControl |
控制項名稱:PostalCode |
||
[CountryRegion] In ("澳洲","新加坡") And Len([郵遞區號]) <> 4 |
MsgBox |
訊息:郵遞區號必須為 4 個字元。 嗶嗶聲:是 類型:資訊 標題:郵遞區號錯誤 |
如果郵遞區號不是 4 個字元,則會顯示一則訊息。 |
... |
CancelEvent |
取消事件。 |
|
GoToControl |
控制項名稱:PostalCode |
||
([CountryRegion] = "加拿大") And ([郵遞區號] Not Like"[A-Z][0-9][A-Z] [0-9][A-Z][0-9]") |
MsgBox |
訊息:郵遞區號無效。 加拿大郵遞區號範例:H1J 1C3 嗶嗶聲:是 類型:資訊 標題:郵遞區號錯誤 |
如果郵遞區號不是加拿大的正確格式,則會顯示一則訊息。 (加拿大郵遞區號範例:H1J 1C3) |
... |
CancelEvent |
取消事件。 |