資料庫物件的事件順序

套用到
Microsoft 365 Access 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),如下所示︰

打開 () 箭頭啟動 () 箭目前 () 箭進入 (控制 ) 箭頭GotFocus (控制)

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

退出箭頭LostFocus

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

退出 (控制) 箭頭迷失焦點 (控制) 箭頭卸載 裝載 () 箭頭停用 () 箭頭關閉 ()

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

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

更新前頭 更新後更新

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

之前 更新箭頭更新後箭頭退出箭頭迷失焦點

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

按鍵箭頭箭頭箭頭變更箭頭按鍵

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

按鍵箭頭箭頭箭頭變更箭頭按鍵向上箭頭NotInList箭頭錯誤

頁面頂端

表單記錄的事件順序

當您將焦點移到其他紀錄、更新紀錄中的資料、刪除現有紀錄或建立新紀錄時,表單上的紀錄會發生事件。

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

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

目前 (表格) 箭頭之前更新 (表格) 箭頭之後更新 (表格) 箭頭目前 (表格)

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

之前 更新 () 箭頭後更新 () 箭頭退出 (控制) 箭頭迷失焦點 (控制 ) 箭頭目前 (形)

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

  • 開啟表單,並變更控制項中的資料︰
    目前 () 箭頭輸入 (控制) 箭頭GotFocus (控制) 箭頭之前 更新 (控制) 箭頭後 更新 ( 控制)
  • 將焦點移至另一個控制項︰
    退出 (控制1) 箭頭失去焦點 (控制1) 箭頭進入 (控制2) 箭頭GetFocus (控制2)
  • 將焦點移至另一筆記錄︰
    之前 更新 () 箭頭的形態 之後 更新 () 箭頭形態 退出 (control2) 箭頭迷失焦點 (control2) 箭頭目前 ()

刪除記錄

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

刪除箭頭DelConfirm 箭頭 DelConfirm 之後

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

建立新記錄

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

目前 () 箭頭輸入 (控制) 箭頭GotFocus (控制 ) 箭頭前插入 () 箭頭後插入 ()

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

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

頁面頂端

表單和子表單的事件順序

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

開啟和關閉表單

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

開啟箭頭載入箭頭調整箭頭大小 啟動箭頭目前

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

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

卸下箭頭關閉箭頭 關閉

若表單上沒有啟用控制項,則在卸載事件後但停用事件之前,表單會發生 LostFocus 事件。

在表單之間移動

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

關閉 (形態1) 箭頭啟動 (形態2)

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

注意

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

使用表單上的資料

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

打開 () 箭頭載入 () 箭頭調整大小 () 箭頭形狀 啟動 () 箭頭目前 (形狀) 箭頭進入 (控制 ) 箭頭GotFocus (控制)

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

退出 (控制) 箭頭迷失焦點 (控制) 箭頭卸載 裝載 () 箭頭停用 () 箭頭關閉 ()

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

使用子表單

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

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

  1. 子表單控制項的事件 (例如 ExitLostFocus)
  2. 表單控制項的事件 (包括子表單控制項)
  3. 表單的事件 (例如 DeactivateClose)
  4. 子表單的事件

注意

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

頁面頂端

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

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

鍵盤事件

當你在表單上的控制項 (焦點時按下並放開按鍵,或使用 SendKeys 動作或語句發送按鍵) ,會發生以下事件序列:

按鍵下鍵箭頭 按鍵鍵 按鍵 按鍵

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

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

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

按鍵按鍵鍵

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

  • 第一個控制項:
    按鍵按鍵前進 更新後 更新頭退出箭頭迷失焦點
  • 第二個控制項:
    輸入箭頭GotFocus箭頭KeyPress箭頭KeyUp

滑鼠事件

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

滑鼠向下箭頭滑鼠上方箭頭點擊

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

  • 第一個控制項:
    退出箭頭LostFocus
  • 第二個控制項:
    輸入箭頭GotFocus箭頭滑鼠下箭頭滑鼠上箭頭點擊

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

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

滑鼠下箭頭鼠上箭頭點擊箭頭DblClick箭頭滑鼠上行

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

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

頁面頂端

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

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

報表的事件

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

開啟箭頭載入箭頭啟動箭頭關閉箭頭停用

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

關閉 (report1) 箭頭啟動 (report2)

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

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

報表區段的事件

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

開啟 () 箭頭舉報 載入 (舉報) 箭頭啟動 (報) 箭頭格式化 (舉報區) 箭頭列印 (舉報區) 箭頭關閉 (舉報) 關閉舉 ()

安全性 您可以使用報表檢視來啟用 使用者對報表的篩選功能。 但與列印預覽不同的是,任何區塊的 格式列印 事件都不會發生在報告檢視中。 這同樣適用於 VBA 功能結果及使用者定義的程序,這些程序會在控制 (中顯示,例如標籤標題、顯示狀態、條件格式、控制項大小調整等,這些) 事件中會顯示。 因此,請勿在此事件中使用程式碼格式化、隱藏或列印機密資料,以免資料暴露。 我們建議預先篩選資料,或透過將 AllowReportView 屬性設為 No(編號)來關閉報表預覽。

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

  • 當 Access 在報表格式設定期間傳回上一個區段時,會發生 Retreat 事件。
  • 如果報表沒有顯示任何記錄,就會發生 NoData 事件。
  • Page 事件會在格式設定之後,但在列印之前發生。 您可以使用此事件自訂列印報表的外觀。

頁面頂端