我一直在使用Application.forms.Count来测量打开的表单数量,大多数情况下,此功能正常工作。但是,每隔一段时间,计数就错了。
当我查看MsgBox中的金额时,Access显示有两个表单打开时很明显只有1个打开。我已经在我的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
经过这么久,我相信我已经找到了这个错误的根源。我之前并不知道表单可以在后台打开而不会实际出现,当您读取或编写项目级变量时会发生这种情况。我检查了一个变量,然后尝试检查表格的数量,尽管只有一个是可见的,但有两个打开。我认为在检查变量之后,一个简单的DoCmd.Close“formNameHere”将是解决此问题的最佳方法。