如何在表单关闭上运行过程,但不在表单编辑上运行

时间:2016-09-17 15:11:55

标签: forms vba ms-access access-vba

在我的VBA表单代码中,我想在表单关闭时调用一个过程,但如果我进入设计视图,我不希望它运行。

我如何区分我的代码?

Private Sub Form_Close()
     'If NotFormEdit then   <--or something?
     Call MyProcedure()
End Sub

当我进入Design View时出现代码错误,因为它希望在退出之前从表单中获取数据,但是当它进入设计视图时它不会这样做。

通常情况下,我是唯一一个进入设计视图的人,但当其他用户关闭表单时,仍然需要运行该程序。

我知道我可以抛出错误然后过去,而且我知道这不是正确的做法。

如果无法区分表格关闭输入表单设计视图,那么我还能做些什么呢?

1 个答案:

答案 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()的代码,并指定错误位置和消息。