DoEvents 函数

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

注意

如果 Microsoft Jet 表达式服务在沙盒模式下运行,则本主题中描述的函数、方法、对象或属性将被禁用,这会阻止对潜在不安全表达式进行评估。 有关沙盒模式的详细信息,请在帮助中搜索“沙盒模式”。

生成执行,以便操作系统可以处理其他事件。

语法

DoEvents ( )

备注

DoEvents 函数返回一个整数,该整数表示 Microsoft Visual Basic 的独立版本(如 Visual Basic 专业版)中打开的窗体数。 DoEvents 在所有其他应用程序中返回零。

DoEvents 将控制权传递给操作系统。 在操作系统处理完其队列中的事件,并且 SendKeys 队列中的所有密钥都已发送后,将返回控制。

DoEvents 对于简单操作最有用,例如允许用户在进程启动后取消进程,例如搜索文件。 对于长时间运行的进程,通过使用计时器或将任务委派给 ActiveX EXE 组件,可以更好地让步给处理器。 在后一种情况下,任务可以完全独立于您的应用程序继续进行,并且操作系统负责多任务处理和时间切片。

每当您在事件过程中暂时让步给处理器时,请确保在第一次调用返回之前不会从代码的其他部分再次执行该过程;这可能会导致不可预知的结果。 此外,如果在你放弃控制权期间其他应用程序可能以不可预见的方式与你的过程交互,请不要使用 DoEvents

示例

注意

下面的示例演示了在Visual Basic for Applications (VBA) 模块中使用此函数。 有关使用 VBA 的详细信息,请在“搜索”旁边的下拉列表中选择“开发人员参考”,然后在搜索框中输入一个或多个术语。

此示例使用 DoEvents 函数,使执行每循环 1000 次迭代一次让步给操作系统。 DoEvents 返回打开的 Visual Basic 窗体数,但仅当主机应用程序为 Visual Basic 时。

' Create a variable to hold number of 
' Visual Basic forms loaded and visible.
Dim I, OpenForms
For I = 1 To 150000    ' Start loop.
    If I Mod 1000 = 0 Then  ' If loop has repeated
                            ' 1000 times.
        OpenForms = DoEvents  ' Yield to operating system.
    End If
Next I    ' Increment loop counter.