访问VBA无法刷新表单

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了访问VBA无法刷新表单相关的知识,希望对你有一定的参考价值。

我有一个表格(frmDropDownEdit),有一个过滤表作为数据。创建一个“新建”按钮,打开另一个表单(frmDropDownNew),用户可以输入新数据。完成后,新表单将关闭,用户将返回原始表单。 frmDropDownNew的代码正确地将信息添加到表中,然后代码刷新frmDropDownEdit表单但不刷新。如果单击功能区中的刷新按钮,它也不会刷新。但刷新一切确实有效。

如何让我的代码刷新frmDropDownEdit中的数据。我也把代码me.refresh放在OnGotFocus事件上但是甚至没有运行。

这是我的源代码

Private Sub Command5_Click()
'Add Button

Dim rst As DAO.Recordset
Set rst = CurrentDb.OpenRecordset("tblDropDown")
rst.AddNew

rst!DdCategory = Me.txtCategory.Value
rst!DdDescription = UCase(Me.txtDescription.Value)

rst.Update
rst.Close

DoCmd.Close
Forms!frmDropDownEdit.Refresh

End Sub
答案

在我的MS Access 2010×64单用户PC上,Forms![AnyForm] .Refresh从未在VBA中工作,独立于任何数据库代码中。 Form_Current()不会在修改数据后运行(通过在其中放置一个Stop来验证)。此外,在vba代码完成之前,具有修改数据的记录既不标记为脏也不刷新。修改数据时应该无延迟运行的程序即使放入修改后的字段事件中也不会运行。

因此,必须使用解决方法。许多人建议使用.Requery而不是.Refresh,然后通过vba代码返回到所需的记录,但这需要一个带主键的字段。

我没有主键的表的解决方案如下:

'…
' ESSENTIAL: this code must be run from ANOTHER module !
' (it runs without error in MyForm's own code [eg. in Form_Activate(),
'  but then MyForm is NOT immediately refreshed as desired,)
'  one still has to repeat these steps by hand afterwards…
DoCmd.GoToRecord acForm, "MyForm", acNext
DoCmd.GoToRecord acForm, "MyForm", acPrevious
' NB: Forms![MyForm].Refresh doesn't work
' at this place in "MyOtherModule" either.
'…

正如上面代码注释中所提到的:这个代码必须从另一个模块(“MyOtherModule”)运行 - 在我的例子中,一个独立于表单的过程在关闭从第一个表单打开的弹出窗体时调用,该窗体以交互方式修改数据。关闭弹出窗体时,应立即更新/刷新这些数据,反映所有更改及其后果(例如,自动填写/删除其他数据和/或启用/禁用控件或使其[可见],取决于修改字段的值)。

以上是关于访问VBA无法刷新表单的主要内容,如果未能解决你的问题,请参考以下文章

访问 VBA:无法初始化数据提供程序

使用 VBA 设置访问表单的控件值

访问VBA:从另一个表单获取复选框的价值

使用表单和子表单访问 VBA 代码格式更新表

无法复制表单中的全部刷新快速访问工具栏按钮

Form.Recordset 属性(访问)