Ms access MS ACCESS---通过VBA刷新所有

Ms access MS ACCESS---通过VBA刷新所有,ms-access,forms,Ms Access,Forms,如何通过vba刷新所有文件? 我想刷新所有打开的表单…像这样的东西怎么样 Sub AllForms() Dim obj As AccessObject dim dbs As Object Dim i As Integer dim intFormCount as Integer Set dbs = Application.CurrentProject intFormCount = dbs.AllForms.Count - 1 For i = 0 To intFormC

如何通过vba刷新所有文件?
我想刷新所有打开的表单…

像这样的东西怎么样

Sub AllForms()
Dim obj As AccessObject
dim dbs As Object
Dim i As Integer
dim intFormCount as Integer

    Set dbs = Application.CurrentProject
    intFormCount  = dbs.AllForms.Count - 1

    For i = 0 To intFormCount
        If dbs.AllForms(i).isloaded = True Then
            dbs.AllForms(i).refresh
        End If
    Next
End Sub

@codesave的答案可能没有满足您的需要,原因是您需要的VBA方法是重新查询,而不是刷新。刷新将显示对现有记录所做的更改,但只有重新查询将显示新添加的记录

下面是一个更简洁的代码版本(将其放在一个模块中,以便您可以从任何形式调用它):


注意:遗憾的是,重新查询会导致丢失当前选定的记录。如果有很长的记录列表,这对于使用来说尤其令人沮丧,因为他们可能需要向下滚动很长一段时间才能找到他们以前查看的记录。

在上面的评论中,您说:

我想把新唱片加进去 该表将以该形式提供 当我回到它

您可能需要检查激活事件。但如果你不知道已经添加了记录,我会重新询问表格。我希望如果我需要这样做(实际上我从来没有这样做过——我的用户知道Shift-F9与此相关,但他们中的大多数人从来都不需要它),我会使用OnActivate事件检查记录的当前计数,只有当计数与当前记录集不匹配时才重新查询表单


但是,我认为这是一件相当异乎寻常的事情。一般来说,如果有太多的表单和一个打开的记录集坐在一起,您离开后又返回,这可能是一个架构错误。当你离开它们时,它们可能应该完全关闭,而不是保持打开状态。这将减少表句柄的数量,以及后端数据库上保留的锁的数量,如果管理不当,这两个问题都可能出现。

刷新什么?你是说再询问吗?这似乎是一件不太可能的事情。“接受”您以前问题的一些答案是一种很好的形式,如果他们确实充分地回答了您的问题。如果我在一个表中添加了一条记录,而访问该表的表单处于打开状态…我希望在返回时,刚刚添加到该表中的新记录可以在该表单中使用…因此现在,我将一条记录添加到表中,转到表单(实际上是一个子表单)并按“刷新”以使该新记录在表单中可用…手动运行…上述VBA没有:(refresh repaint requery-正如@ToddOwen所说,您可能希望重新查询而不是刷新。我不明白您为什么要使用AllForms并检查IsLoaded属性,而不仅仅是使用Forms集合(其中仅包括已加载的表单).Hmm.我不喜欢这样的代码。有两件事:1.在设计视图中打开的任何表单都会出错。2.为什么在没有记录源的情况下重新查询表单?后者不会产生任何影响或导致错误,但做一些毫无意义的事情会触犯我的编程美学。谢谢,我们可以做些什么来避免在设计视图中从任何表单中出错nd如何将内容恢复到原始视图(我可以先添加书签吗?)而不是在重新查询之前让表单显示不同的记录您可以检查表单的CurrentView属性(有一个枚举以显示可能性)要查看它是否在“设计”视图中打开,而不是在“重新查询”视图中打开。如果您想在重新查询后返回到原始的当前记录,那么您应该在重新查询之前保存PK值,然后使用FindFirst返回到它。书签在重新查询后无法保存。是的。我也会这样看。我想不出有哪一次我没有需要重新查询所有打开的表单。此外,我尽量避免使用一个或两个以上的打开表单。@Christopher Robinson我突然想到,您可能使用表单B向表单a添加了一条记录,并且可能错过了在该点上重新查询表单a。如果表单a/B体系结构已就位,则应使用对话框开关打开表单B,以便您可以在启用B后重新查询a奥塞德。
Public Sub RequeryOpenForms()
    Dim f as Form

    For Each f In Access.Forms
        f.Requery
    Next
End Sub