【问题标题】:VBA Wait until form openVBA 等到表单打开
【发布时间】:2012-10-02 00:26:46
【问题描述】:

我在 Access 项目中有以下 VBA:

DoCmd.OpenForm "Importing"
' Some CPU-intensive code

问题是,在密集部分完成之前,我只会得到一个白屏。

如何等到表单打开后再执行其余代码?

【问题讨论】:

  • 这是我的一篇旧帖子....可能会得到你想要的StackOverflow - How to freeze parent form while child form is open
  • @GoldBishop 感谢您的帖子,但这并不是我真正想要的。您接受的答案会暂停父表单,直到子表单关闭。对我来说,我需要父表单暂停,直到子表单加载。原因是,这包含在主菜单上的一个按钮单击中,该按钮调用一个名为 Importing 的表单,并定期用信息更新它。导入表单本身没有任何文本框(只有标签),因此没有绑定到任何数据。不过谢谢!
  • 根据您的需要和库可访问性,以下答案将起作用,但您可以修改我需要的解决方案以适合您的解决方案。您可能还想查看表单属性“Data-Wati for Post Processing”作为替代方案。

标签: ms-access ms-access-2007 vba


【解决方案1】:

抱歉问题,我刚刚找到了答案(其中一个案例是谷歌搜索了一段时间,发布到 SO,然后立即找到答案):

DoCmd.OpenForm "Importing"
DoEvents
' Some CPU-intensive code

【讨论】:

  • 从主菜单的 Importing 表单上更改标签标题(等)后,DoEvents 也会立即更新它们的标签。
  • +1 是的,做事件是为了让处理赶上进度,在某些情况下,尤其是在运行多组密集代码时,我喜欢在我的 doevents 和让它暂停十分之一秒。
【解决方案2】:

为了完整起见,你也可以使用以下函数,我不记得我从哪里得到它,但我没有写它:

Function IsLoaded(ByVal strFormName As String) As Boolean
' Returns True if the specified form is open in Form view or Datasheet view.
' Use form name according to Access, not VBA.
' Only works for Access
    Dim oAccessObject As AccessObject

    Set oAccessObject = CurrentProject.AllForms(strFormName)
    If oAccessObject.IsLoaded Then
        If oAccessObject.CurrentView <> acCurViewDesign Then
            IsLoaded = True
        End If
    End If

End Function

然后在你的代码中:

 DoCmd.OpenForm "Importing"
    Do While Not ISLoaded("Importing")
        DoEvents
    Loop

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-23
    • 2014-12-25
    • 2023-04-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多