Ms access Application.forms.Count有时不准确

Ms access Application.forms.Count有时不准确,ms-access,vba,Ms Access,Vba,我一直在使用Application.forms.Count来测量打开的表单的数量,大多数情况下,此函数工作正常。然而,偶尔,计数是错误的 当我在MsgBox中查看金额时,Access认为有两个表单处于打开状态,而很明显只有一个表单处于打开状态。我在我的Form_Unload方法上运行了这个函数,因为只有当表单是最后一个仍然打开的表单时,它才应该关闭。我已经确保在执行此操作时没有其他Access实例在运行,并且没有打开任何弹出窗口或模态 Dim Form As Double Form = App

我一直在使用Application.forms.Count来测量打开的表单的数量,大多数情况下,此函数工作正常。然而,偶尔,计数是错误的

当我在MsgBox中查看金额时,Access认为有两个表单处于打开状态,而很明显只有一个表单处于打开状态。我在我的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 
如前所述,这段代码在大多数情况下都能正常工作,但当出现错误计数时,这是一个主要障碍,我想找出原因。

使用(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
通过使用(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

经过这么长时间,我相信我已经找到了这个错误的根源。我以前不知道表单可以在后台打开而不实际出现,当你读或写一个项目级变量时就会发生这种情况。我检查了一个变量,然后试着检查表单的数量,结果有两个表单打开,尽管只有一个可见。我认为是一个简单的DoCmd。关闭“formNameHere”检查变量后是解决此问题的最佳方法。

经过这么长时间,我相信我已经找到了此错误的根源。我以前不知道表单可以在后台打开而不实际出现,并且在读取或写入项目级变量时会发生这种情况。我检查了一个变量并然后尝试检查表单的数量,尽管只有一个可见,但有两个表单打开。我认为一个简单的DoCmd。检查变量后关闭“FormName here”将是解决此问题的最佳方法。

首先:不应命名变量
表单
,因为这是一种对象类型。第二:当访问“计数错误”时然后检查表单集合中表单的名称(
Debug.Print forms(0).Name
Debug.Print forms(1).Name
)。好的,我已将变量更改为formCount。一旦再次遇到此问题,我将再次更新此主题,并尝试您建议的方法。此外,
Forms.Count
方法返回一个
Long
,而不是
Double
。第一:不应命名变量
Form
,因为这是一种对象类型。第二:当ess“计数错误”,表示2而不是预期的1,然后检查表单集合中表单的名称(
Debug.Print forms(0)。Name
Debug.Print forms(1)。Name
)。好的,我已将变量更改为formCount。一旦再次遇到此问题,我将再次更新此主题,并尝试您的建议。此外,
Forms.Count
方法返回的是
Long
,而不是
Double