Access 2007 拆分表单 VBA:打开时 acNewRec 可防止在表单中跳动 - 就像第一个字段未“选择”一样

Posted

技术标签:

【中文标题】Access 2007 拆分表单 VBA:打开时 acNewRec 可防止在表单中跳动 - 就像第一个字段未“选择”一样【英文标题】:Access 2007 Split form VBA: acNewRec on open prevents tabbing through form - acts like the first field is not 'selected' 【发布时间】:2010-10-28 21:47:24 【问题描述】:

我希望有人可以帮助我,或者至少帮助找出解决方法。

我正在使用 Access 2007 的拆分表单功能,并在 Form_Open 事件以及两个 button_click 事件之后运行以下代码。该代码在 button_click 事件之后运行时工作正常,但是当它在 form_open 事件上运行时,它会导致问题。

如果打开表单并且用户在第一个字段中输入文本,他/她不能使用 Tab 或鼠标选择下一个表单字段。用户停留在第一个表单域,直到按 Esc 取消数据输入。为了在打开表单时在第一个表单域中成功输入数据,用户必须先选择另一个表单域,然后重新选择第一个表单域,然后在第一个表单域中输入文本。在此废话之后,用户可以使用 Tab 或鼠标选择下一个表单域。每次启动表单时都必须执行一次。 button_click 事件上的相同 VBA 代码可以正常工作。

值得注意的是:第一次打开表单时,表单的数据表部分中没有一个表单字段显示为“已选择”。当用户开始在第一个表单字段中输入数据时,“新记录”标记 (*) 会按原样移至第二行,但第一行不显示正在输入的数据。这种行为很奇怪。

执行清除字段后,单击另一个字段,单击返回到上述第一个字段解决方法,数据表显示正确选择的字段和输入的数据。

有什么想法吗?这是一个错误吗?是否有简单的解决方法,例如在打开表单时通过 VBA 执行字段选择解决方法?

非常感谢任何帮助。

代码:

DoCmd.ApplyFilter , "([Contractor].[CheckOutStamp] Is Null)"
DoCmd.GoToRecord , "", acNewRec

链接到 mdb: https://docs.google.com/leaf?id=0B-jx09cwIQDsYWM2MzMzMDQtYjUzNi00N2E5LWFjYTktNzFiYWYzMDZiYWU1&hl=en&authkey=CPPmoMEF

【问题讨论】:

【参考方案1】:

一些想法:

尝试将其从 OnOpen 移至 OnLoad。 OnOpen 中的事件可以在数据实际加载之前发生,而 OnLoad 是在加载完成之后发生的。

另外,您可能只想将表单的 Filter 属性设置为 [Contractor].[CheckOutStamp] Is Null 并将 FilterOn 设置为 Yes,并将表单设置为 DataEntry,这意味着它在打开时默认为新记录,并且不加载任何的旧记录。打开后,您可以将表单的编辑/添加模式更改为您喜欢的任何模式。

【讨论】:

你先生,太棒了!这就像一个魅力。非常感谢! 只需将代码移动到 OnLoad 事件即可解决我遇到的特定问题。 DataEntry 属性像宣传的那样工作,但对我没有用,因为我需要在加载时显示旧记录。我继续按照您的建议设置 Filter 属性和 FilterOn,以过滤用户是否启用 VBA,但我也留下了 VBA 过滤器代码。 请记住,如果您编辑记录源,过滤器属性将被重置。

以上是关于Access 2007 拆分表单 VBA:打开时 acNewRec 可防止在表单中跳动 - 就像第一个字段未“选择”一样的主要内容,如果未能解决你的问题,请参考以下文章

从 Access 中的 VBA 调用时 Outlook.exe 进程未结束

MS Access 未打开时 DMax 功能不起作用

MS access mdb 文件第一次从 Access 2007 打开时处于“修复”状态

Ms Access 数据库可以在使用 vba 打开时创建自己的备份吗?

Access 2007 / VBA - 多个表单实例,从模块更新特定实例的控件

是否有类似于 Access 2007 拆分表单的 .NET 控件?