2017-08-31 53 views
0

請幫我解釋一下,爲什麼出現這種情況後,該解決方案應該是容易:)微距形式停止工作,使用VBA打開後

我有兩種形式,呈現出不同的數據。

Form_1:有一個組合框(包含名稱),您可以在其中選擇要查看的公司,並且更新後的宏將搜索該記錄([ID]字段)並顯示信息。 (更復雜的是,這個[ID]字段是隱藏的,並且用於實際顯示信息的子表單)。

表單2:這是一個連續表單,每條記錄都與Form_1中顯示的公司相關,但幾個記錄可以屬於一個公司。每個記錄都有一個按鈕,用於打開與其連接的信息的Form_1。按鈕的VBA代碼是:

Private Sub Button_Click() 
DoCmd.OpenForm "Form_1", , , "[ID] = " & Me![ID] 
End Sub 

在代碼中,相同的[ID]領域時,如上所述:隱藏和用於子表單。 兩種表格都在按需要工作,我對他們感到滿意。

但是,Form_1通過按鈕從Form_2打開後,組合框仍然是空的(實際上我不需要填充),如果我想用它來搜索其他項目,它不起作用,就好像該宏未加載一樣。名單列表出現,我可以點擊其中任何一個,但[ID]字段沒有刷新(當然也沒有子表單)。我必須關閉表格,並從旁邊再次打開它。

爲什麼宏停止工作? 我應該改變什麼,使其工作?

感謝您的幫助!

+0

這聽起來好像通過鏈接到主表單的子表單可以更好地處理它。儘管訪問抱怨說,你不能連接到一個連續的形式的子表單,它是騙你。只需設置它,並在將窗體視圖重置爲單一窗體後,將其重新設置爲連續。 – Minty

+0

子窗體沒有鏈接到連續窗體。 Form_1是一個單記錄表單,其中主表單包含[ID]字段,該字段連接到任意位置(由組合框宏刷新,由Form_2設置,並連接到子表單 – barathg

+0

這很難直觀顯示,您可能需要使用窗體On_Current事件中的一個來刷新頂級窗體上的ID值?也許您的窗體圖片和一些註釋會有所幫助。 – Minty

回答

0

Form1將篩選器打開到特定的鍵值,因此嘗試查找並重新定位表單的當前記錄將失敗,但不顯式重置篩選器。

OpenForm命令的Where條件不會更改表單的Record Source屬性,也不會執行簡單的搜索/重定位。相反,它適用於表單過濾

DoCmd.OpenForm "Form_1", , , "[ID] = " & Me![ID] 

這種狀態表明在幾個方面

  • 在主功能區(即工具欄):該切換篩選按鈕激活...以不同的顏色突出顯示。
  • 窗體底部的窗體顯示「Filtered」的窗體導航欄突出顯示一個小漏斗圖標。
  • 訪問狀態欄顯示「Filtered」右側靠近其他指標。

當然,所有這些指標都可能是隱藏的,所以您只需要知道每個命令和參數的作用。


可能的解決方案:

  • Form1的ComboBox.AfterUpdate宏觀尋找一個新的ID值之前,應關閉過濾器。
  • Form2的Button_Click事件在不應用過濾器的情況下打開表單,而是運行與ComboBox.AfterUpdate方法執行相同操作的代碼 - 搜索並重新定位表單的記錄而不是過濾它。
    • 這可以通過多種方式實現,並且在很大程度上超出了本答案的範圍,但提示是在執行搜索的Form1模塊中創建一個Public方法。 ComboBox.AfterUpdate方法和其他按鈕調用相同的公共方法,因此它們具有相同的行爲。
+0

感謝您的詳細解答,情況與您所描述的完全相同 也許它會更優雅地修改az Form_2 Button_Click事件,但對於我來說ComboBox.AfterUpdate宏是easyer,它完美的工作!:) – barathg