Excel VBA基于表格创建柱状图时报“找不到指定名称的项目”错误原因
错误原因
- 核心问题是代码硬编码了固定图表名称
Chart 29:这个名称是你录制宏时当时工作表生成的第29个图表的默认名称,实际每次运行宏新建图表时,图表的默认名称会根据当前工作表已有的图表数量动态递增,不会固定为Chart 29,因此VBA找不到对应名称的形状对象,触发报错。 - 额外稳定性隐患:原代码大量使用
Select/Activate这类依赖当前激活状态的方法,很容易因为运行时选中的工作表/对象变化触发其他未知错误。
优化后可运行代码
直接用变量持有新建的图表对象,不需要硬编码名称,也不需要多余的选中操作:
Sub 生成柱状图() Dim targetChart As Chart Dim dataRange As Range ' 定义数据源 Set dataRange = Sheets("Q221 Insurers").Range("B2:C3,G2:I3,B7:C7,G7:I7") ' 新建簇状柱状图 Set targetChart = Sheets("Q221 Insurers").Shapes.AddChart2(201, xlColumnClustered).Chart ' 设置数据源和样式 With targetChart .SetSourceData Source:=dataRange .ClearToMatchStyle .ChartStyle = 205 End With ' 调整图表位置、尺寸,剪切到Sheet1 With targetChart.Parent .IncrementLeft -349.5 .IncrementTop 192 .ScaleWidth 0.4656251094, msoFalse, msoScaleFromTopLeft .ScaleHeight 0.6145833333, msoFalse, msoScaleFromTopLeft .ScaleWidth 1.7203577726, msoFalse, msoScaleFromTopLeft .ScaleHeight 1.4802259887, msoFalse, msoScaleFromTopLeft .Cut End With Sheets("Sheet1").Paste Application.CutCopyMode = False End Sub
内容的提问来源于stack exchange,提问作者Patrick_Chong
相关产品推荐
相关产品推荐

