You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 01:18:02