2008-12-03 117 views
2

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

某些代码可以运行几分钟,因此有什么方法可以显示剩余时间或显示已完成进程百分比的消息吗?

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

+1

BTW给出的方法。考虑标记你给出的“接受”的一些答案。它是Stack Overflow的货币。它赢得了你的声誉,它赢得了我们的声誉,如果不这样做,你实际上鼓励我们不要回答你的问题。 – BIBD 2008-12-03 15:44:59

+1

我不知道这一点。我会这样做 – tksy 2008-12-04 09:58:33

回答

1

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

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

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

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

0

为了做到这一点“正常”的方式,你需要在另一个线程中运行你的验证,并让它报告它的进度回到UI线程。但是,我不相信VBA支持任何类型的多线程。

如果您的验证程序涉及一个循环,甚至只是许多单独的分立的操作,你可以尝试在循环迭代(或操作)之间插入DoEvents声明,然后让你的进度显示定期更新(比如说,在一个Application_OnTime事件处理程序)。

0

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

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

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

希望有所帮助。