通常,作为开发人员,我们会尽最大努力确保函数调用几乎是即时发生的,并且用户没有明显的等待时间。
如果一个过程耗时超过四分之一秒或半秒,我们可以使用以下简单代码将鼠标指针变成沙漏(或在更高版本的Windows上旋转圆圈)
Docmd.HourGlass=True
当我们完成后,用
Docmd.HourGlass=False
但是,如果我们有一个较长的运行过程,尤其是耗时超过10秒钟的过程,则冒着使用户变得不耐烦,杀死应用程序的风险,并冒着中间过程终止的所有风险。
要获得一点耐心,我们可以尝试一个仅显示“请稍候”的弹出表格,但实际上我们可以做得更好。
我们可以使用进度表格,该表格既不告诉用户正在发生的事情,也可以向用户显示有进度,表明应用程序尚未终止。
考虑到这一点,我着手创建比简单的“请稍候...”表格更高级的内容,这就是结果。
可下载的示例包含5个对象。 处理图形的进度表单(TSC_ProgressFormSimple),处理所有逻辑的类模块(TSC_PF_Simple),2个实用程序模块和一个表单(frm_Test)尝试说明预期的用法。
您将需要将frm_Test以外的所有内容导入应用程序。
要启动进度表,您只需为新的类对象标注尺寸:
'Init progress form
Dim oPF As TSC_PF_Simple
Set oPF = New TSC_PF_Simple
现在,我们要设置标题和初始任务文本,然后显示表单
'Show the form
oPF.Title = "Importing Objects" & vbNewLine & "Please wait..."
oPF.UpdateTask 0, "Preparing Import"
oPF.Show
每次报告进度时,我们只需调用UpdateTask方法,即可将新百分比提供为介于0和1之间的数字(1为100%),并可选地显示文本。
oPF.UpdateTask 0.5 , "Importing"
当您完成所有操作并希望关闭表单时,只需将对象变量设置为nothing,其余的将由类负责。
在这种情况下,我将其包括在清理过程中:
Exit_Sub:
'Cleanup
Set oPF = Nothing
该类具有一些内置的计时器,以防止闪烁,并使用户有机会在关闭表单之前看到过程完成。
另一个选择是允许用户取消一个过程(在更新表单时,技术上来说介于过程之间)。 如果将AllowCancel设置为true,则取消按钮将变为可见,用户现在可以尝试取消。 请注意,单击事件仅在进度表更新时发生。
如果需要,此进度表将使用Stephen Leban的代码自动调整文本框架的大小。 这意味着您可以使用长文本字符串而不会错过。
希望您喜欢这个免费样品。 请记住,反馈和评论是使火势持续不断的动力。
剩下的问题是这样的进度表仅在您有大量要顺序运行的操作时才有用。 如果您只拥有一个可以运行的大型查询,那不是很有用,因为进度表只能在查询或其他函数调用之间更新图形。
From: https://bytes.com/topic/access/insights/948747-access-progress-form