我使用两种形式。此代码所来自的表单显示预约约会的每周摘要:它包含显示每天每个团队的约会计数的文本框,以及每日和每周总计。我用一个函数替换了所有文本框的双击事件。双击文本框时,另一个表单用于显示在该文本框中计算的记录。除非用户已经打开了详细信息表单并且已经通过表单选项选择了过滤器但尚未应用过滤器,否则这一切都很有效。
我检查详细信息表单是否打开,如果没有,那么我用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 :(得分:0)
啊,很好找到Filter
事件!
我会在MyForm
模块中使用一个公共变量来保存FilterByForm状态,并且可以从外部访问:
Option Compare Database
Option Explicit
Public bFilterByForm As Boolean
在Filter
和ApplyFilter
事件中进行设置和清除:
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
答案 1 :(得分:0)
非常感谢Andre给予他所有的帮助,我的最终解决方案主要是他的工作,稍加编辑以允许表格保持开放状态。我将此功能添加到AKA MyForm
的详细信息中Public Sub RunApplyFilter()
Forms("MyForm").SetFocus
DoCmd.RunCommand acCmdApplyFilterSort
End Sub
最后的检查使用Andre方法来识别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
再次感谢Andre。