2016-07-06 55 views
1

我正在使用兩種形式。此代碼的表單顯示每週預約的每週摘要:其中包含顯示每天每個團隊的約會次數以及每日和每週總計的文本框。我用一個函數替換了所有文本框的雙擊事件。當雙擊文本框時,將使用另一個表單來顯示在該文本框中計算的記錄。除非用戶已將詳細信息表單打開,並且已通過表單選項選擇過濾器,但尚未應用過濾器,否則這一切都會很好。如何檢查表單視圖是否爲過濾器

我檢查是否詳細信息表單是否打開,如果不是,則我用SQL sting打開它以顯示計數約會的記錄。如果詳細信息表單已經打開,我會檢查是否應用了過濾器,將其刪除,然後過濾以顯示計數約會的記錄。

If CurrentProject.AllForms("MyForm").IsLoaded = False Then 
    DoCmd.OpenForm "MyForm", , mysql 
Else 
    If Forms("MyForm").FilterOn = True Then Forms("MyForm").FilterOn = False 
    Forms("MyForm").Filter = myfil 
    Forms("MyForm").FilterOn = True 
End If 

如何通過表單視圖/狀態來檢查詳細表單是否在過濾器中?如果是,關閉它。所以我可以應用過濾器來顯示計數約會的記錄。

+0

我只是在這些情況下關閉已經打開的窗體,然後用我的過濾器重新打開窗體。 - 爲避免閃爍,您可以在執行此操作時執行「Application.Echo False」。 – Andre

+0

我已經考慮過這種方法,但是我的用戶調整了表單的大小並安排他們喜歡,所以我必須記錄表單的位置和大小,然後在相同的位置和大小下重新打開表單。我還考慮捕捉錯誤以觸發關閉並重新打開。我希望能有一個表格屬性,我可以檢查,但我沒有找到它的運氣。 – tonyuk1977

+0

我發現這給我更多的信息,但沒有解決問題,我做了如何使問題更具體的https://msdn.microsoft.com/en-us/library/office/ff191892.aspx。我如何測試這些文件增補程序acFilterByForm,acFilterAdvanced? – tonyuk1977

回答

0

啊,很好找Filter事件!

Option Compare Database 
Option Explicit 

Public bFilterByForm As Boolean 

它設置和清除在FilterApplyFilter事件:

我的MyForm模塊,節省了FilterByForm狀態,可從外部訪問中使用公共變量

Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer) 

    ' acShowAllRecords = 0 
    ' acApplyFilter = 1 
    ' acCloseFilterWindow = 2 
    Debug.Print "Form_ApplyFilter: " & ApplyType 

    ' I don't think checking for ApplyType is necessary - 
    ' in each case the filter windows is closed. 

    ' FilterByForm is finished! 
    bFilterByForm = False 

End Sub 

Private Sub Form_Filter(Cancel As Integer, FilterType As Integer) 

    ' acFilterByForm = 0 
    ' acFilterAdvanced = 1 
    Debug.Print "Form_Filter: " & FilterType 

    If FilterType = acFilterByForm Then 
     ' FilterByForm is active! 
     bFilterByForm = True 
    End If 

End Sub 

並使用此變量您的調用子可以檢查FilterByForm狀態:

If Form_MyForm.bFilterByForm Then 
    ' FilterByForm is active: close the form! 
    DoCmd.Close acForm, "MyForm" 
    DoCmd.OpenForm "MyForm", , mysql 
End If 
+0

現在我只需要弄清楚如何取消filterbyform,而不是關閉並重新打開表單。 – tonyuk1977

0

非常感謝Andre對他的所有幫助,我的最終解決方案大多是他的工作,只需稍作修改即可讓表單保持打開狀態。細節形成AKA MyForm的

Public Sub RunApplyFilter() 
Forms("MyForm").SetFocus 
DoCmd.RunCommand acCmdApplyFilterSort 
End Sub 

和最終檢查使用安德烈方法來確定是否MyForm的是FilterByForm鑑於我添加了這個功能。

If CurrentProject.AllForms("MyForm").IsLoaded = False Then 
    DoCmd.OpenForm "MyForm", , mysql 
Else 
    If [Form_MyForm].bFilterByForm = True Then Forms("MyForm").RunApplyFilter 
    If Forms("MyForm").FilterOn = True Then Forms("MyForm").FilterOn = False 
    Forms("MyForm").Filter = myfil 
    Forms("MyForm").FilterOn = True 
End If 

再次感謝安德烈。

+0

我用acCmdCloseWindow替換了acCmdApplyFilterSort,它關閉了過濾器窗口,但沒有應用我更喜歡的過濾器,但是一旦窗口關閉,我就會收到「無記錄」錯誤。有任何想法嗎? – tonyuk1977

相關問題