我有一个可以关闭其前身的Access表单 -
If CurrentProject.AllForms("fmFileCheck").IsLoaded Then
DoCmd.Close acForm, "fmFileCheck", acSaveNo
Else
End If
IF语句工作正常(我已经注入了一个消息框来测试),但表单根本没有关闭。没有错误信息或任何东西,它只是坐在那里诱惑我,像一只松鼠嘲笑猫。
编辑:
表格在其前任的“当前”事件上打开,上面的代码在“当前”上执行 - 但如果打开的代码通过第一个按钮调用第二个表单然后它运作正常 - 所以我猜这个问题就在那里?
答案 0 :(得分:0)
有可能你的表单实际上是frmFileCheck而不是fmFileCheck吗?仔细检查表单名称的拼写。
您还可以调试程序以查看条件是否为True并且正在执行命令。
我认为你不需要在if语句中嵌套close命令。只需执行命令,如果已加载,它将关闭它。我几乎肯定你不会通过关闭未加载的表单来获得错误。
答案 1 :(得分:0)
在其中一个活动程序正在运行时,您无法关闭该表单。
其实你应该得到一个
运行时错误' 2585':处理表单或报表事件时无法执行此操作。
您的代码中是否有On Error Resume Next
?这可能很危险。
我解决事件的常用方法是使用计时器事件。
在第二种形式中,上面的代码将运行,执行:
Me.TimerInterval = 1
然后(也是第二种形式)
Private Sub Form_Timer()
Me.TimerInterval = 0
If CurrentProject.AllForms("fmFileCheck").IsLoaded Then
DoCmd.Close acForm, "fmFileCheck", acSaveNo
End If
End Sub
答案 2 :(得分:0)
我有一个类似的问题,表格(连续表格,显示公司信息,地址,联系信息等)独立,虽然从另一个表单的按钮点击打开。该表单仅用于查看数据,无数据输入;所以我将Data Enabled设置为False。无论表单是如何打开的(从另一个表单或左侧的导航栏),表单都不会通过使用Button(单击事件驱动器docmd.close acform,me.name)来关闭。
我最近打开它决定将Data Enabled False切换为True并将Data Lock切换为True(来自false)。完成该按钮后,表单再次开始工作。不知道切换这两个设置是否与它有关;但我对表单做的唯一其他事情就是调整Tab键顺序(Close按钮位于列表的底部并保留在那里)。