我有一个包含多个子表单的表单,其内容以不同的形式编辑,通过命令按钮打开。
当更新这些表单中的数据并关闭其他表单时,自然需要刷新主表单才能看到这些表单。单击“刷新所有快速访问”工具栏按钮可以完美实现此目的。
所以我为主窗体上的“聚焦”事件制作了一个宏来刷新它,但它没有做任何事情。我尝试重新绘制并重新查询,将后者专门应用于相关的子表单,并将它们从vba中运行而不是构建宏的访问接口,这些似乎都没有解决问题。
vba编码:
.psobject.ToString([cultureinfo]::InvariantCulture)
令人讨厌的是,如果我把它(或者甚至只是宏或Private Sub Form_GotFocus()
Screen.ActiveForm.Requery
Screen.ActiveForm.Repaint
Screen.ActiveForm.Refresh
Me.sfmContact.Requery
Me.frmCustCert.Requery
Me.frmCustReq.Requery
End Sub
)放在其中一个控件的on click事件中它可以正常工作。似乎无法使其在任何不需要最终用户思考或点击的自动事件中起作用。
这个问题有点像Refresh button on an Access form,但这个问题已经超过一年了,并且没有接受答案。所以我已经扩展了它。
答案 0 :(得分:0)
您在评论中提到的内容是正确的:
我的猜测是它没有运行它,但我不知道为什么。我在OnActivate和OnLoad之间混淆了,这就是为什么我没有尝试这个选项。这有效并解决了问题,但为什么GotFocus不会火?当另一个表单获得更新时,主表单肯定会失去焦点,然后当另一个表单关闭/主表单中的任何内容被选中时它会再次返回...
为避免将来出现此类错误,在代码中专门命名表单而不是使用“我”可能是明智的。命令,因为它只适用于当前焦点。例如:
Me.sfmContact.Requery > Forms![FormName].sfmContact.Requery
或者,您可以在进行此类编码之前将焦点设置为相关表单。
Forms![FormName].SetFocus