访问 VBA 无法刷新表单



我有一个表单(frmDropDownEdit),它有一个过滤的表作为数据。 创建一个"新建"按钮,打开另一个表单(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

在我的 MS Access 2010 ×64 单用户 PC 上,表单!任何形式].刷新在 VBA 中从未工作过,独立于它放置在任何数据库代码中的位置。Form_Current() 在数据被修改后也不会正常运行(通过在其中放置 Stop 进行验证)。此外,在 vba 代码完成之前,具有已修改数据的记录既不会标记为脏,也不会刷新。修改数据时应无延迟运行的过程不会运行,即使放入修改字段的事件中也是如此。

因此,必须使用解决方法。很多人建议使用.重新查询而不是 。刷新,然后通过 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")运行 - 在我的例子中,关闭从第一个表单打开的弹出表单时调用的独立于表单的过程,该过程以交互方式修改数据。关闭弹出表单时,应立即更新/刷新这些数据,以反映所有更改及其后果(例如,根据修改后的字段的值,自动填充/删除其他数据和/或 en/禁用控件或使其 [不] 可见)。

最新更新