【问题标题】:Access Form Will Not Close访问表单不会关闭
【发布时间】:2016-09-22 12:56:30
【问题描述】:

我有一个应该关闭其前身的 Access 表单 -

If CurrentProject.AllForms("fmFileCheck").IsLoaded Then
    DoCmd.Close acForm, "fmFileCheck", acSaveNo
    Else
    End If

IF 语句工作正常(我注入了一个消息框进行测试),但表单根本没有关闭。没有错误信息或任何内容,它只是坐在那里嘲笑我,就像松鼠嘲笑猫一样。

编辑:

表单在其前身的“当前”事件上打开,上面的代码在“当前”上执行 - 但如果代码打开第二个表单是通过第一个表单上的按钮调用的它工作正常 - 所以我猜问题出在哪里?

【问题讨论】:

  • DoCmd.SetWarnings的设置是什么?如果不指定acSaveNo 会怎样? (我发现从来没有设置过,因为它总是回来咬我)
  • 我选择哪个设置没有区别,而且 SetWarnings 没有被触及。
  • 您正在关闭您正在打开的同一个表单?或关闭一个不同的?你想做什么?也许这可能会给我们一个线索!
  • 如果您尝试关闭表单并重新打开它,请查看DoEvents。它可以帮助您在尝试关闭和/或打开表单之前刷新事件和消息队列。

标签: vba ms-access


【解决方案1】:

当其中一个事件过程正在运行时,您不能关闭表单。

其实你应该得到一个

运行时错误“2585”:处理表单或报表事件时无法执行此操作。

您的代码中有On Error Resume Next 吗?这可能很危险。


我通常的解耦事件的方法是使用 Timer 事件。

在您的第二种形式中,上面的代码将运行:

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】:

    一种可能是您的表单实际上被命名为 frmFileCheck 而不是 fmFileCheck?仔细检查表单名称的拼写。

    也可以调试程序,看条件是否为真,命令是否正在执行。

    我认为您不需要将 close 命令嵌套在 if 加载语句中。只需执行命令,如果已加载,它将关闭它。我几乎可以肯定,关闭未加载的表单不会出错。

    【讨论】:

    • 不 - 我已经调试(使用 msgbox)并且 if 语句工作正常,这意味着该表单的名称肯定正确并已加载。
    【解决方案3】:

    我在一个单独的表单(连续表单,显示公司信息、地址、联系信息等)上遇到了类似的问题,尽管它是通过从另一个表单单击按钮打开的。该表格仅用于查看数据,没有数据输入;所以我将数据启用设置为假。使用按钮(单击事件驱动 docmd.close acform、me.name)不会关闭表单,无论表单是如何打开的(从另一个表单或从左侧的导航栏)。

    我最近打开它,决定将启用数据的 False 切换为 True,并将 Data Lock 切换为 True(从 false)。完成该按钮后,表单再次开始工作。不知道切换这两个设置是否与它有关;但我对表单所做的唯一另一件事是调整标签顺序(关闭按钮位于列表底部并保留在那里)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-10-06
      • 2011-10-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-08-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多