什么可以阻止 MS Access 2000 表单关闭?
Posted
技术标签:
【中文标题】什么可以阻止 MS Access 2000 表单关闭?【英文标题】:What can prevent an MS Access 2000 form from closing? 【发布时间】:2008-09-17 15:16:10 【问题描述】:我的 Access 2000 DB 导致我出现问题 - 有时(尚未查明原因)“书”表单不会关闭。单击其关闭按钮什么也不做,文件->关闭什么也不做,即使关闭 Access 也不会导致任何操作。我没有此表单的 OnClose 处理程序。我能找到的唯一解决方法是打开 Vba 编辑器,更改该表单的代码(甚至添加一个空格,然后立即删除该空格),然后返回关闭“书”表单,将其关闭,然后说“不,我不想保存更改”。只有这样它才会关闭。有什么帮助吗?
【问题讨论】:
替代解决方法:在设计视图中编辑表单,然后再次拒绝保存。 【参考方案1】:这是一个论坛帖子,我认为,描述了您面临的同样问题。以下摘录说明了一种解决方法。
我所做的是将代码放在重新分配源对象的关闭按钮上 将任何子表单转换为空白表单,例如:
me!subParts.sourceobject = "subBlank" 'subBlank 是我的表单 完全空白,没有代码和控件等。 docmd.close acForm, "fParts", acSaveNo
以上两行是我发现阻止访问提示的唯一方法 从弹出。
http://bytes.com/forum/thread681889.html
【讨论】:
【参考方案2】:另一种选择是
(Me.Checkbox)
或我喜欢的语法:
(Me!Checkbox)
在我看来,这个主题的帖子有很多混乱。原始发布者选择的答案引用了一篇文章,其中用户提示将设计更改保存到表单,但这里描述的问题似乎是表单关闭失败,而不是保存问题(保存问题仅出现在描述转到 VBE 并进行代码更改的解决方法中)。
我想知道原始用户是否设置了错误的 VBE 选项?如果您打开 VBE 并转到 TOOLS |选项,在常规选项卡上,您将看到有关错误处理的几个选项。应该选择 BREAK ON UNHANDLED ERRORS 或 BREAK IN CLASS MODULE,但重要的是要认识到,如果您使用前者,您可能不会看到某些类型的错误。
实际上并没有足够的细节来诊断更多问题,除了对复选框控件的引用似乎是导致问题的原因,但有许多 Access 编码最佳实践可以帮助您避免其中一些怪事。 Tony Toews's Best Practices page 中与代码相关的建议是一个很好的起点。
【讨论】:
【参考方案3】:这确实很奇怪。您在表单上有任何计时器控件吗?如果这样做,请尝试在 OnClose 中禁用它。
【讨论】:
不,我在整个项目的任何地方都没有使用任何计时器控件。【参考方案4】:询问您是否要保存更改的消息框可能会显示在表单后面。我相信此消息框是模态的,因此您必须单击是或否才能对表单执行任何操作,这就是您无法关闭它的原因。
【讨论】:
我不相信是这样,因为在尝试关闭表单后,我仍然可以与表单交互,转到下一条记录,进行更改等。【参考方案5】:您的表单是否有卸载事件?可以取消,如果是,表单在表单视图中时不会关闭。它只会在设计视图中关闭,当您编辑 vba 代码时,表单在您编辑代码时在 Access 窗口中执行的操作。
【讨论】:
表单只有 OnCurrent、BeforeUpdate 和 OnOpen 事件。【参考方案6】:您的表单是否有复选框、切换按钮或选项按钮? Access 2000 中存在一个错误,如果您在未明确使用 vba 代码中的 Value 属性的情况下测试值,则 Access 不会关闭,如下所示:
If Me.chkbox Then
对比:
If Me.chkbox.Value Then
【讨论】:
我的所有表单上都有一个复选框,代码完全相同。我不认为这会导致我原来的问题,但我会在所有地方解决这个问题,这样我就不会遇到这个错误。 现在您知道为什么表单无法关闭了。 在我进行此更改之前,表单关闭错误似乎已修复。 这似乎是固定的,因为您正在使用一种解决方法。你明白为什么解决方法有效吗?这是因为它正在进行设计更改,将其置于允许表单关闭的设计模式。删除解决方法并在使用按表单过滤的表单上使用 Me.chkbox.Value 语法 - 这是此错误的一个触发因素。以上是关于什么可以阻止 MS Access 2000 表单关闭?的主要内容,如果未能解决你的问题,请参考以下文章