显示代码运行时剩余的时间

时间:2008-12-03 13:30:45

标签: vba ms-access access-vba

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

有些代码可以运行几分钟,那么有没有办法显示剩余时间或显示完成百分比的消息?

或者在代码评估开始时弹出一条消息,一旦代码运行完成,消息就会消失?

4 个答案:

答案 0 :(得分:1)

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

我已经使用了Microsoft ProgressBar控件(您可以在Insert-> ActiveX控件下找到它),并且它并不难使用。只需将其值设置为百分比(整数,而不是小数)。

'foo, being the ProgressBar
me.foo = 70 '70%

这里有一些关于另一种方法的好信息:http://www.granite.ab.ca/access/progressbar.htm

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

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

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

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

希望有所帮助。

答案 3 :(得分:0)

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

http://oreilly.com/pub/h/3330#code