如上所述,這是一個Access 2010 .accdb。當browseto從子窗體而不是父窗體調用時,爲什麼Access 2010不會觸發窗體卸載事件?
我有一個主要的導航窗體:frmNav。
在frmNav我有一個導航子窗體控件:NavigationSubForm。
我使用docmd browseto在導航控件的選項卡之間移動。
在NavigationSubForm控件中加載的第一種形式是frmInboundShipments。
frmInboundShipments包含一個子窗體控件sfrmListInvoicesByShipment。
sfrmListInvoicesByShipment包含與frmInboundShipments中的每個貨件相關的發票過濾數據表。
frmItemInvoices包含sfrmListInvoicesByShipment中引用的發票。
frmInboundShipments和frmItemInvoices之間移動使用browseto命令的下列方法做觸發上frmInboundShipments卸載事件:
- 點擊命令按鈕上frmInboundShipments調用browseto到frmItemInvoices
- 點擊在frmNav上的導航控件上的導航選項卡/按鈕來調用browseto frmItemInvoices。
然而,當我執行以下操作(S),在frmInboundShipments 卸載事件未能觸發:
一個字段/數據錶行雙擊在sfrmListInvoicesByShipment來觸發browseto命令可通過以下任一方式顯示/移動到frmItemInvoices:
a。立即執行docmd browseto以顯示frmItemInvoices
b。第一父窗體上設置焦點,然後執行的DoCmd browseto顯示frmItemInvoices
i. e.g.: Me.Parent.sfrmListInvoicesByShipments.SetFocus DoCmd.BrowseTo acBrowseToForm, "frmItemInvoices", "frmNav.NavigationSubform", ...criteria....
我無法理解我的生活爲什麼當browseto命令從發佈的事件不觸發子窗體,但在兩種窗體之間導航時在其他場景中觸發。
我已經看過Access 2010中的事件順序,並沒有看到任何明確指出主窗體的Unload事件在移動到查看子窗體中的其他窗體時不會觸發的任何事情。
在這種情況下,停用事件也不會觸發。
更新,10/18/13:進一步調查顯示父窗體的Close事件確實觸發,但絕對不是停用或卸載事件。問題是,一旦表單關閉事件發生,我想要捕獲的值已經消失。不知道從這裏做什麼...
我現在還不能關閉它,但我確實找到了解決方法:當從子窗體調用browseto時,我決定移動數據捕獲,而不是在父窗體的unload事件中捕獲值到子窗體控件的Enter事件。最終結果可能是它更頻繁地寫入,當用戶選中子窗體控件或搜索該窗體中的值時,等等。最終,它完成了目標。我仍然很想知道爲什麼卸載不會觸發。至少在這種情況下,關於子表單的事件順序的MS文檔實際上是不足的。 – rudelerius
我發現在Access中爲了使表單被處置,它需要關閉然後處置。在我以前的使用中,VBA不允許公開(可見或不可)的表格。不幸的是,當涉及到VBA時,如果你不告訴它這麼做,那麼你將不得不細化它,這並不意味着它。 – GoldBishop
您是否嘗試過從父窗體而不是子窗體觸發BrowseTo命令?如果有(如我所假設的)一個變量對子窗體很重要,那麼可以將它傳遞給公共字符串,並在觸發代碼時使用該字符串? – BFWebAdmin