Microsoft Access中表单打开及图表刷新时触发进度条应使用什么事件
解决方案
1. 表单首次打开的触发事件
使用表单的Load事件即可匹配需求,该事件会在表单被打开、且完成基础控件初始化后触发,仅在表单首次从关闭状态打开时触发一次,切换视图、刷新记录源都不会重复触发。
如果需要进一步规避特殊场景下的重复触发(比如从设计视图切到窗体视图),可以额外加一个模块级变量做标记:
' 表单通用声明区域定义变量 Private blnFormFirstOpen As Boolean Private Sub Form_Load() If Not blnFormFirstOpen Then ' 此处放入你的进度条启动逻辑 blnFormFirstOpen = True End If End Sub
注意:不要用
Open事件,该事件触发时表单控件还未完成初始化,此时操作图表控件可能会触发运行时错误。
2. 所有图表刷新完成的识别方法
未绑定图表控件的刷新是异步执行的,表单本身没有原生的「所有OLE对象刷新完成」事件,你需要通过单个图表的完成事件计数来实现:
- 首先在表单通用声明区域定义计数变量:
Private intChartFinishedCount As Integer - 对四个未绑定图表控件,分别绑定
Updated事件(Access 365现代图表、旧版MS Graph OLE控件均支持该事件),每个事件触发时对计数变量+1 - 每次计数后判断是否等于4,若相等则判定为所有图表刷新完成,执行进度条收尾逻辑
示例代码:
' 通用声明 Private intChartFinishedCount As Integer ' 四个图表各自的Updated事件,逻辑统一即可 Private Sub Chart1_Updated(Code As Integer) Call ChartRefreshFinished End Sub Private Sub Chart2_Updated(Code As Integer) Call ChartRefreshFinished End Sub Private Sub Chart3_Updated(Code As Integer) Call ChartRefreshFinished End Sub Private Sub Chart4_Updated(Code As Integer) Call ChartRefreshFinished End Sub ' 统一的完成判断逻辑 Private Sub ChartRefreshFinished() intChartFinishedCount = intChartFinishedCount + 1 If intChartFinishedCount = 4 Then ' 此处放入进度条关闭、后续业务逻辑 ' 重置计数,避免后续手动刷新图表时重复触发 intChartFinishedCount = 0 End If End Sub
特殊适配说明:如果你的图表是嵌入的Excel图表对象,
Updated事件不生效的话,可以在手动给图表赋值数据源的代码末尾直接调用ChartRefreshFinished方法,一样可以实现计数逻辑。
内容的提问来源于stack exchange,提问作者J.D. Walker
相关产品推荐
相关产品推荐

