创建带滚动条的动态嵌入图表时触发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
关键修改说明
- 替换
ActiveChart为embedCht:直接使用提前声明的图表对象,彻底避免依赖活动对象的不确定性,这是解决错误91的核心。 - 移除所有
Select操作:VBA中Select/Activate是对象引用错误的高发原因,通过直接绑定对象(如scrollBarObj)操作控件,代码更稳定高效。 - 修正命名范围引用格式:去掉双等号,直接使用命名范围名称即可(当前工作簿内的命名范围无需带工作簿名)。
内容的提问来源于stack exchange,提问作者gerd amft
相关产品推荐
相关产品推荐

