在我的VBA表单代码中,我想在表单关闭时调用一个过程,但如果我进入设计视图,我不希望它运行。
我如何区分我的代码?
Private Sub Form_Close()
'If NotFormEdit then <--or something?
Call MyProcedure()
End Sub
当我进入Design View时出现代码错误,因为它希望在退出之前从表单中获取数据,但是当它进入设计视图时它不会这样做。
通常情况下,我是唯一一个进入设计视图的人,但当其他用户关闭表单时,仍然需要运行该程序。
我知道我可以抛出错误然后过去,而且我知道这不是正确的做法。
如果无法区分表格关闭和输入表单设计视图,那么我还能做些什么呢?
答案 0 :(得分:1)
现在你的问题更清楚了。
我认为唯一的方法是在被调用的过程中测试表单状态。但对我来说(Access 2010),Close事件和被调用的过程在之前运行并完成切换到Design视图实际上已完成。
(编辑:我刚注意到这基本上是克里什在上面的评论中所写的。)
Public Sub MyProcedure()
' Is form loaded?
If SysCmd(acSysCmdGetObjectState, acForm, "frmStart") = 0 Then
Debug.Print "Form is not loaded!"
Exit Sub
End If
If Form_frmStart.CurrentView = 0 Then
Debug.Print "Form is opened in Design view!"
Exit Sub
End If
' This is reached and works for me if I switch frmStart to Design view!
MsgBox Form_frmStart.product
End Sub
如果这样做无效,请在问题中添加MyProcedure()
的代码,并指定错误位置和消息。