Vba 运行时显示剩余时间

Vba 运行时显示剩余时间,vba,ms-access,Vba,Ms Access,我有一个带有几个按钮的表单,按下这些按钮时执行代码,就像在数据库上运行验证一样 有些代码可以运行几分钟,因此是否有任何方法显示剩余时间或显示已完成进程百分比的消息 或者在代码评估开始时弹出一条消息,并且该消息应该在代码运行完成后消失?为了以“正常”的方式执行此操作,您需要在另一个线程中运行验证,并让它将其进度报告回UI线程。但是,我认为VBA不支持任何类型的多线程 如果您的验证例程涉及一个循环,甚至只是许多单独的离散操作,您可以尝试在循环迭代(或操作)之间插入一个DoEvents语句,然后定期更

我有一个带有几个按钮的表单,按下这些按钮时执行代码,就像在数据库上运行验证一样

有些代码可以运行几分钟,因此是否有任何方法显示剩余时间或显示已完成进程百分比的消息

或者在代码评估开始时弹出一条消息,并且该消息应该在代码运行完成后消失?

为了以“正常”的方式执行此操作,您需要在另一个线程中运行验证,并让它将其进度报告回UI线程。但是,我认为VBA不支持任何类型的多线程


如果您的验证例程涉及一个循环,甚至只是许多单独的离散操作,您可以尝试在循环迭代(或操作)之间插入一个
DoEvents
语句,然后定期更新进度显示(例如,在
应用程序实时
事件处理程序中).

我通常有一个表单名frmProgress或其他什么,带有一个取消按钮和一个用于显示状态消息的标签。然后,在表单代码中嵌入了一个名为bCancel的布尔值,当您点击cancel按钮时,它只会将bCancel设置为true

在这段代码中,我还有一个名为ShowPercDone(Idx,NumIdc)的例程,其中Idx是代码所在的步骤,NumIdc是代码将要执行的步骤数(假设每个步骤花费相同的时间)。当我运行for循环时,这很有效,但基本上,每当我想要显示状态更新时,我只需调用带有消息的表单中的例程,我应该添加消息,并为我运行doevents命令

这就是状态表的工作原理。在我运行的宏中,我首先调用frmProgress.show(0),这样您就可以单击“取消”按钮。然后,在我的循环中,当我更新状态消息时,我检查frmProgress.bCancel,如果是真的,我退出宏


希望能有所帮助。

您可能正在寻找的是一个“进度条”

我使用过MicrosoftProgressBar控件(您可以在Insert->ActiveX控件下找到它),使用起来并不难。只需将其值设置为百分比(作为整数,而不是小数)


这里有一些关于另一种方法的好信息:

最后,为了简单起见,我决定使用这里给出的方法


BTW.考虑把你被给予的一些答案标记为“被接受”。它是堆栈溢出的货币。它为你赢得了声誉,也为我们赢得了声誉,如果你不这么做,你实际上是在鼓励我们不要回答你的问题。我没有意识到这一点。在我看来,Tony的SysCmd方法更可取,因为它使用内置的访问控件,而不是引入对外部ActiveX控件的依赖。
'foo, being the ProgressBar
me.foo = 70 '70%