访问VBA无法刷新表单

时间:2017-06-02 12:46:38

标签: vba ms-access refresh

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

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

这是我的源代码

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

1 个答案:

答案 0 :(得分:0)

在我的MS Access 2010×64单用户PC上,Forms![AnyForm] 。Refresh从未在VBA中工作,无论它放在任何数据库代码中的位置都是独立的。修改数据后(通过在其中插入Stop进行验证),Form_Current()也不按预期运行。此外,在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 ”)运行-在我的情况下,与窗体无关的过程,在关闭从第一个窗体打开的弹出式窗体时调用,该窗体以交互方式修改数据。这些数据应在关闭弹出窗口时立即更新/刷新,以反映所有更改及其后果(例如,自动填充/删除其他数据和/或启用/禁用控件或使它们[不可见],具体取决于修改后的字段的值。