我一直在使用Application.forms.Count来衡量打开的表单的数量,并且在大多数情况下,此功能可以正常工作。但是,每隔一段时间,计数是错误的。
当我查看一个MsgBox中的金额时,Access显然只有1个打开状态,所以认为有2个打开的窗体。我在Form_Unload方法上运行此方法,因为只有在最后一个窗体仍处于打开状态时,窗体才应该关闭。我确保执行此操作时没有其他Access实例在运行,并且没有打开任何弹出窗口或模式。
Dim Form As Double
Form = Application.forms.Count
MsgBox Form
If Form = 1 Then
'Nothing, form closes
DoCmd.ShowToolbar "Ribbon", acToolbarYes
Else
MsgBox "You cannot close this form right now."
cancel = True
End If
End Sub
如前所述,这段代码在大多数情况下都有效,但是当计数错误时,这是一个主要障碍,我想找出是什么原因造成的。
答案 0 :(得分:1)
使用(Debug.Print Forms(0).Name和Debug.Print Forms(1).Name),我能够确定我打开的表单在某种程度上已经复制了自己(尽管该表单只有一个版本)在屏幕上打开)。虽然我不知道这是怎么发生的,但只要重新启动MS Access即可消除重复。我将添加此补充if语句以防止将来出现这种情况:
If formCount = 1 Then
...
Else
If Forms(0).Name = Forms(1).Name Then
'The duplication error is happening again
DoCmd.Close "FormNameHere"
End If
End If
答案 1 :(得分:1)
所有这些时间之后,我相信我已经找到了此错误的根源。我以前不知道可以在后台打开表单而没有实际出现,而这种情况是在您读取或编写项目级变量时发生的。我检查了一个变量,然后尝试检查表单的数量,尽管只有一个可见,但有两个打开。我认为检查变量后使用简单的DoCmd.Close“ formNameHere”是解决此问题的最佳方法。