Application.forms.Count有时不准确

时间:2019-02-11 21:14:58

标签: ms-access access-vba

我一直在使用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 

如前所述,这段代码在大多数情况下都有效,但是当计数错误时,这是​​一个主要障碍,我想找出是什么原因造成的。

2 个答案:

答案 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”是解决此问题的最佳方法。