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

创建带滚动条的动态嵌入图表时触发Run-time error '91'求助

解决VBA动态折线图Run-time error '91'问题

错误原因

最后两行触发错误的核心问题:

  • 创建图表后执行了滚动条的添加与选中操作,此时**ActiveChart已不再指向你创建的折线图**(活动对象变为滚动条),导致ActiveChart为Nothing,触发"对象变量或With块变量未设置"错误。
  • 你已提前声明并赋值embedCht图表对象,完全无需依赖不可靠的ActiveChart。
  • 命名范围引用格式错误,不需要双等号前缀。

修正后的代码

Sub dynamic_chart()
    Dim lastRow As Long
    Dim embedCht As Chart
    Dim scrollBarObj As Shape ' 新增滚动条对象变量,避免Select操作

    ' 创建嵌入式折线图并绑定到对象
    Set embedCht = ActiveSheet.Shapes.AddChart(xlLine).Chart
    
    ' 创建动态命名范围
    ActiveWorkbook.Names.Add Name:="Dates", RefersToR1C1:="=OFFSET(Sheet1!R1C1,Sheet1!R1C3+1,0,200,1)"
    ActiveWorkbook.Names.Add Name:="Close", RefersToR1C1:="=OFFSET(Sheet1!R1C2,Sheet1!R1C3+1,0,200,1)"
    
    ' 设置图表坐标轴标签方向
    embedCht.Axes(xlCategory).TickLabels.Orientation = 45
    
    ' 添加滚动条并直接绑定到对象,避免Select
    Set scrollBarObj = ActiveSheet.ScrollBars.Add(5, 374, 1110, 20)
    lastRow = ActiveSheet.Range("A1").CurrentRegion.Rows.Count
    
    ' 直接设置滚动条属性,无需Select
    With scrollBarObj
        .Value = 0
        .Min = 0
        .Max = lastRow - 200
        .SmallChange = 50
        .LargeChange = 200
        .LinkedCell = "$C$1"
        .Display3DShading = True
    End With

    ' 使用已绑定的embedCht对象,替换ActiveChart,修正命名范围引用格式
    embedCht.FullSeriesCollection(1).Values = "Close"
    embedCht.FullSeriesCollection(1).XValues = "Dates"
End Sub

关键修改说明

  1. 替换ActiveChart为embedCht:直接使用提前声明的图表对象,彻底避免依赖活动对象的不确定性,这是解决错误91的核心。
  2. 移除所有Select操作:VBA中Select/Activate是对象引用错误的高发原因,通过直接绑定对象(如scrollBarObj)操作控件,代码更稳定高效。
  3. 修正命名范围引用格式:去掉双等号,直接使用命名范围名称即可(当前工作簿内的命名范围无需带工作簿名)。

内容的提问来源于stack exchange,提问作者gerd amft

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.06 13:50:31