Applies ToAccess for Microsoft 365 Access 2024 Access 2021 Access 2019 Access 2016

單一動作 (例如,從某個物件上的一個 控制項 移到另一個控制項) 可能會以特定的順序,觸發數個不同的事件。 了解事件發生的時間及其發生的順序非常重要,因為這可能會影響您的巨集或事件程序執行的方式和時機。 例如,如果有兩個要以特定順序執行的事件程序,您要確認其相關聯的事件是否以該相同順序發生。

本文內容

表單控制項的事件順序

當您將 焦點 移至控制項時,以及當您變更和更新控制項中的資料時,會發生表單控制項的事件。

附註: Microsoft Office Access 在 Visual Basic 編輯器中顯示的事件名稱與在屬性表和巨集建立器中顯示的事件名稱稍有不同。 例如,在表單的屬性表和巨集建立器中,名為 On Got Focus 的事件在 Visual Basic 編輯器中名為 GotFocus。 本文中的範例會將 Visual Basic for Applications (VBA) 格式用於事件名稱。

將焦點移到控制項

當您將焦點移到表單上的控制項 (例如,透過開啟包含一個或多個作用中控制項的表單,或透過將焦點移至相同表單上的另一個控制項) 時,EnterGotFocus 事件發生的順序如下︰

輸入 箭號 GotFocus

當您開啟表單時,EnterGotFocus 事件會在與開啟表單相關聯的事件之後發生 (例如OpenActivateCurrent),如下所示︰

) 箭號 Enter (控制項) 箭號GotFocus (控制件) 開啟 (表單) 箭號啟用目前 (表單) 箭號(表單

當焦點離開表單上的控制項 (例如,當您關閉包含一個或多個作用中控制項的表單時,或當您移至相同表單上的另一個控制項時) 時,ExitLostFocus 事件發生的順序如下︰

結束 箭號 LostFocus

當您關閉表單時,ExitLostFocus 事件會在與關閉表單相關聯的事件之前發生 (例如 UnloadDeactivateClose),如下所示︰

) 箭號 停用 (表單) 箭號關閉 (表單) ,) 箭號Unload (表單結束 (控件) 箭號LostFocus (控件

變更和更新控制項中的資料

當您在表單上輸入或變更控制項中的資料,然後將焦點移到另一個控制項時,BeforeUpdateAfterUpdate 事件發生的順序如下︰

BeforeUpdate 箭號 Afte rUpdate

對於其值變更的控制項而言,ExitLostFocus 事件會發生在 BeforeUpdateAfterUpdate 事件之後:

BeforeUpdate 箭號 AfterUpdate 箭號 Exit 箭號 LostFocus

當您變更文字方塊中的文字或下拉式方塊的文字方塊區段中的文字時,會發生 Change 事件。 每當控制項的內容變更時,但在您將焦點移到不同的控制項或記錄之前 (因此是在 BeforeUpdateAfterUpdate 事件發生之前),就會發生此事件。 對於您在文字方塊或在下拉式方塊的文字方塊區段中按下的每個按鍵,會發生以下的事件順序︰

KeyDown 箭號 KeyPress 箭號 Dirty 箭號 Change 箭號 KeyUp

當您在下拉式方塊中輸入下拉式方塊清單中找不到的值,然後嘗試將焦點移至另一個控制項或記錄之後,便會發生 NotInList 事件。 NotInList 事件會發生在下拉式方塊的 keyboard 事件和 Change 事件之後,但是在其他任何控制項或表單的事件之前。 如果下拉式方塊的 LimitToList 屬性設為 Yes,在 NotInList 事件之後便會立即發生表單的 Error 事件:

KeyDown 箭號 KeyPress 箭號 Dirty 箭號 Change 箭號 KeyUp 箭號 NotInList 0 錯誤

頁面頂端

表單記錄的事件順序

當您將 焦點 移至不同的記錄、更新記錄中的資料、刪除現有的一筆或多筆資料,或建立一筆新記錄時,會發生表單記錄的事件。

將焦點移至記錄以及更新記錄中的資料

當您將焦點移至表單上現有的記錄、輸入或變更記錄中的資料,然後將焦點移至另一筆記錄時,會發生以下的表單事件順序︰

Current (窗體) 箭號BeforeUpdate (窗體) 箭號AfterUpdate (窗體) 箭號Current (窗體)

當您離開其資料已變更的記錄時,但是在您輸入下一筆記錄之前,焦點所在的控制項會發生 ExitLostFocus 事件。 這些事件會在表單的 BeforeUpdateAfterUpdate 事件之後發生,如下所示︰

BeforeUpdate (表單) 箭號AfterUpdate (窗體) 箭號Exit (控件) 箭號LostFocus (控件) 箭號Current (窗體)

在表單上的控制項之間移動焦點時,會發生每個控制項的事件。 例如,當您執行下列操作時,會發生以下的事件順序︰

  • 開啟表單,並變更控制項中的資料︰

    目前 (表單) 箭號Enter (控件) 箭號GotFocus (控件) 箭號BeforeUpdate (控件) 箭號AfterUpdate (控件)

  • 將焦點移至另一個控制項︰

    結束 (控件 1) 箭號LostFocus (控件1) 箭號Enter (控件 2) 箭號GotFocus (control2)

  • 將焦點移至另一筆記錄︰

    BeforeUpdate (窗體) 箭號AfterUpdate (窗體) 箭號Exit (control2) 箭號LostFocus (control2) 箭號Current (窗體)

刪除記錄

當您刪除記錄時,會發生下列表單事件,而且 Microsoft Office Access 會顯示一個對話方塊,要求您確認刪除︰

Delete 箭號 BeforeDelConfirm 箭號 AfterDelConfirm

如果您取消 Delete 事件,就不會發生 BeforeDelConfirmAfterDelConfirm 事件,而且不會顯示該對話方塊。

建立新記錄

當您將焦點移至表單上的新 (空白) 記錄,然後在控制項中輸入資料來建立新記錄時,就會發生以下的事件順序︰

目前 (窗體) 箭號Enter (控件) 箭號GotFocus (控件) 箭號BeforeInsert (表單) 箭號AfterInsert (窗體)

BeforeInsert (表單) 事件會在您開始在控件中輸入時觸發。 AfterInsert (表單) 事件會在您離開記錄後觸發。

表單控制項以及新記錄的 BeforeUpdateAfterUpdate 事件會發生在 BeforeInsert 事件之後以及 AfterInsert 事件之前。

頁面頂端

表單和子表單的事件順序

當您開啟或關閉表單、在表單之間移動,或使用表單或子表單上的資料時,會發生表單事件。

開啟和關閉表單

當您開啟表單時,會發生以下的表單事件順序︰

箭號載入 箭號重設大小 箭號用目前 箭號

如果表單上沒有作用中的控制項,表單的 GotFocus 事件會發生在 Activate 事件之後,但是在 Current 事件之前。

當您關閉表單時,會發生以下的表單事件順序︰

Unload 箭號 停用 箭號 Close

如果表單上沒有作用中的控制項,表單的 LostFocus 事件會發生在 Unload 事件之後,但是在 Deactivate 事件之前。

在表單之間移動

當您在兩個開啟的表單之間切換時,第一個表單 Deactivate 事件,而第二個表單會發生 Activate 事件︰

停用 (窗體1) 箭號 用 (窗體2)

當您在 Access 中,從表單切換到另一個物件索引標籤時,也會發生表單的 Deactivate 事件。 不過,當您切換到對話方塊、其 PopUp 屬性設定為 Yes 的表單,或是另一個程式中的視窗時,則不會發生 Deactivate 事件。

附註: 如果您將焦點移至已開啟的表單,即使您透過執行 OpenForm 動作將焦點移至該表單,還是不會發生 Open 事件。

使用表單上的資料

當您在表單中的記錄之間移動,並變更資料時,會發生表單和控制項事件。 例如,當您第一次開啟表單時,會發生以下的事件順序︰

) 箭號 Enter (控件 )0 GotFocus (控件) 箭號啟用 (表單) 箭號用 (目前 () 箭號表單) 箭號設大小 (表單) 箭號開啟 () 窗體) 箭號載 (窗體

同樣地,當您關閉表單時,會發生以下的事件順序︰

) 箭號 Deactivate (窗體) 箭號停用) 箭號Close (表單) ,結束 lo stFocus (控件) 箭號Unload (窗體 ( ( ( ( (

如果您已變更控制項中的資料,則控制項和表單的 BeforeUpdateAfterUpdate 事件會發生在控制項的 Exit 事件之前。

使用子表單

當您開啟包含子表單的表單時,也會在主表單之前載入子表單及其記錄。 因此,子表單及其控制項的事件 (例如 OpenCurrentEnterGotFocus) 會發生在表單的事件之前。 但是,不會發生子表單的 Activate 事件。 因此,開啟主表單僅會觸發主表單的 Activate 事件。

同樣地,當您關閉包含子表單的表單時,子表單及其記錄會在表單之後卸載。 而且不會發生子表單的 Deactivate 事件。 因此,關閉主表單僅會觸發主表單的 Deactivate 事件。 控制項、表單及子表單的事件發生順序如下:

  1. 子表單控制項的事件 (例如 ExitLostFocus)

  2. 表單控制項的事件 (包括子表單控制項)

  3. 表單的事件 (例如 DeactivateClose)

  4. 子表單的事件

附註: 由於子表單的事件會在主表單關閉之後發生,因此將不會發生從子表單中的事件取消關閉主表單之類的特定事件。 您可能需要將這些類型的驗證測試移至主表單上的事件。

頁面頂端

按鍵輸入和按一下滑鼠的事件順序

如果您在表單或控制項有 焦點 時按下按鍵或送出按鍵,則會發生表單和控制項的鍵盤輸入事件。 如果您在滑鼠指標位於表單、區段或控制項上時按一下滑鼠按鈕,則會發生表單、表單區段和表單上控制項的滑鼠事件。 當您將滑鼠指標移動到表單、區段或控制項上時,也會發生滑鼠事件。

鍵盤事件

如果焦點在表單上的控制項時,按下並放開按鍵 (或使用 SendKeys 動作或 陳述式 傳送按鍵),就會發生以下的事件順序︰

KeyDown 箭號 KeyPress 箭號 KeyUp

當您在 ANSI 字元集 中按下並放開按鍵或傳送按鍵時,KeyDownKeyPressKeyUp 事件全部都會發生。 如果您按下並按住 ANSI 鍵,KeyDownKeyPress 事件會重複交替發生 (KeyDownKeyPressKeyDownKeyPress,依此類推),直到您放開按鍵為止,然後才會發生 KeyUp 事件。

如果您按下並放開非 ANSI 鍵,則會發生 KeyDownKeyUp 事件。 如果您按下並按住非 ANSI 鍵,KeyDown 事件會重複發生,直到您放開按鍵為止,然後才會發生 KeyUp 事件。

如果按下按鍵會觸發控制項的另一個事件,則該事件會發生在 KeyPress 事件之後,但是在 KeyUp 事件之前。 例如,如果某個按鍵變更文字方塊中觸發 Change 事件的文字,則會發生以下的事件順序︰

KeyDown 箭號 KeyPress 箭號 Change 箭號 KeyUp

如果某個按鍵使焦點從一個控制項移到另一個控制項,則第一個控制項會發生 KeyDown 事件,而第二個控制項會發生 KeyPressKeyUp 事件。 例如,如果您變更控制項中的資料,然後按 TAB 鍵,移至下一個控制項,會發生以下的事件順序︰

  • 第一個控制項:

    KeyDown 箭號 BeforeUpdate 箭號 AfterUpdate 箭號 Exit 箭號 LostFocus

  • 第二個控制項:

    輸入 箭號 GotFocus 箭號 KeyPress 箭號 KeyUp

滑鼠事件

如果您在滑鼠指標位於表單上的控制項時按一下並放開滑鼠按鈕,會發生以下的控制項事件順序︰

MouseDown 箭號 MouseUp 箭號 按一下

如果焦點在控制項上,而且您按一下另一個控制項,將焦點移到這個第二個控制項,則會發生以下的事件順序︰

  • 第一個控制項:

    結束 箭號 LostFocus

  • 第二個控制項:

    輸入 箭號 GotFocus 箭號 MouseDown 箭號 MouseUp 箭號 按兩下

如果您移到另一筆記錄,然後按一下某個控制項,表單的 Current 事件也會發生在控制項的 Enter 事件之前。

按兩下某個控制項可使 ClickDblClick 事件同時發生。 例如,當您按兩下命令按鈕以外的控制項時,便會發生以下的控制項事件順序:

MouseD own 箭號 MouseUp 箭號 按兩下 箭號 DblClick 箭號 MouseUp

當您按兩下命令按鈕時,會發生上述的事件順序,後面緊接著另一個 Click 事件。

當您將滑鼠指標移動到表單、區段或控制項上時,會發生表單、區段或控制項的 MouseMove 事件。 此事件與其他滑鼠事件無關。

頁面頂端

報表及報表區段的事件順序

當您開啟報表來列印或預覽時,或關閉報表時,會發生報表和報表區段的事件。

報表的事件

當您開啟報表來列印或預覽,之後再關閉報表或移到 Access 中的另一個物件索引標籤時,會發生以下的報表事件順序︰

箭號箭號關閉 箭號停用

當您在兩個開啟的報表之間切換時,第一個報表會發生 Deactivate 事件,而第二個報表會發生 Activate 事件︰

停用 (報表1) 箭號 用 (報表2)

當您在 Access 中,從報表切換到另一個物件索引標籤時,也會發生報表的 Deactivate 事件。 不過,當您切換到對話方塊、其 PopUp 屬性設定為 Yes 的表單,或是另一個程式中的視窗時,則不會發生 Deactivate 事件。

當您開啟以查詢為基礎的報表時,Access 會先觸發報表的 Open 事件,然後再執行基礎查詢。 因此,您可以使用回應 Open 事件的巨集或事件程序來設定報表的準則。 例如,巨集或事件程序可以開啟自訂對話方塊,讓您在其中輸入報表準則。

報表區段的事件

當您列印或預覽報表時,報表區段的 FormatPrint 事件會發生在報表的 OpenActivate 事件之後,以及報表的 CloseDeactivate 事件之前︰

啟 (報表) 箭號停用 (報) 箭號(停 (報表) 箭號) 箭號() 箭號[列印 (報表] 區段) 箭號啟用 (報) 表

安全性    您可以使用 [報表檢視] 啟用 使用者對報表的篩選。 但不同於 [列印預覽],任何區段中的 [格式 ] 和 [ 列印 ] 事件不會出現在 [報表檢視] 中。 這也適用於在這些事件中顯示控件 (的 VBA 函數結果和使用者定義程式,例如標籤號、顯示狀態、設定格式化的條件、控件大小等) 。 因此,請勿在此事件中使用程式代碼來格式化、隱藏或列印可能會公開的機密數據。 建議您預先篩選數據或停用報表預覽,方法是將 AllowReportView 屬性設為 No。

此外,下列事件可能會在格式設定期間或之後,但在 Print 事件之前發生︰

  • 當 Access 在報表格式設定期間傳回上一個區段時,會發生 Retreat 事件。

  • 如果報表沒有顯示任何記錄,就會發生 NoData 事件。

  • Page 事件會在格式設定之後,但在列印之前發生。 您可以使用此事件自訂列印報表的外觀。

頁面頂端

Need more help?

Want more options?

探索訂閱權益、瀏覽訓練課程、瞭解如何保護您的裝置等等。

社群可協助您詢問並回答問題、提供意見反應,以及聆聽來自具有豐富知識的專家意見。