VBA动态范围图表报错:无法找到形状‘Grafiek 3’的解决方法
解决VBA图表运行时“无法找到形状‘Grafiek 3’”的问题
这个问题太常见了!你遇到的核心问题是硬编码了图表的名称Grafiek 3——每次运行宏新增图表时,Excel会自动给新图表分配递增的名称(比如第一次运行是Grafiek 3,第二次就变成Grafiek 4,第三次Grafiek 5以此类推),所以下次运行宏时,自然找不到之前的固定名称。
最优解决方案:用变量引用图表对象,彻底摆脱名称依赖
与其靠Excel自动生成的名称去定位图表,不如在创建图表时直接把它赋值给一个变量,后续所有操作都直接用这个变量,再也不用操心名称的问题。同时我还会帮你优化掉代码里冗余的Select/Selection操作(这些操作不仅低效,还容易引发其他意外问题)。
修改后的完整代码如下:
Sub grafiek() ' 插入新表头行并设置内容 Rows(1).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove Range("A1").FormulaR1C1 = "Datum" Range("E1").FormulaR1C1 = "Cases" Range("F1").FormulaR1C1 = "Doden" ' 创建图表并赋值给变量,避免硬编码名称 Dim coronaChart As Shape Set coronaChart = ActiveSheet.Shapes.AddChart2(227, xlLine) ' 【可选优化:设置动态数据源,适配每日新增的行】 Dim lastRow As Long lastRow = ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row Dim dataRange As Range Set dataRange = Range("A1:A" & lastRow & ",E1:F" & lastRow) ' 绑定图表数据源(如果不需要动态范围,也可以保留你原来的整列引用) coronaChart.Chart.SetSourceData Source:=dataRange ' 调整图表位置 coronaChart.IncrementLeft 249 coronaChart.IncrementTop -52.2 ' 设置图表标题及格式 With coronaChart.Chart.ChartTitle .Text = "Coronagegevens" With .Format.TextFrame2.TextRange.Characters(1, 14) .ParagraphFormat.TextDirection = msoTextDirectionLeftToRight .ParagraphFormat.Alignment = msoAlignCenter With .Font .BaselineOffset = 0 .Bold = msoFalse .NameComplexScript = "+mn-cs" .NameFarEast = "+mn-ea" .Fill.Visible = msoTrue .Fill.ForeColor.RGB = RGB(89, 89, 89) .Fill.Transparency = 0 .Fill.Solid .Size = 14 .Italic = msoFalse .Kerning = 12 .Name = "+mn-lt" .UnderlineStyle = msoNoUnderline .Spacing = 0 .Strike = msoNoStrike End With End With End With End Sub
关键改进点说明:
- 用变量
coronaChart存储图表对象:创建图表时直接把它赋值给变量,后续调整位置、设置数据源、修改标题等操作都通过这个变量完成,完全不需要依赖Excel自动生成的图表名称,从根源上解决“找不到形状”的问题。 - 移除冗余的
Select/Selection操作:原代码里的Rows("1:1").Select、Range("A1").Select等操作都是多余的,直接对单元格/对象进行操作更稳定高效。 - 新增动态数据源处理:通过
lastRow获取A列最后一行有数据的行号,动态生成数据源范围,让图表自动适配每日新增的行数据,完美契合你的需求。
内容的提问来源于stack exchange,提问作者Moi
相关产品推荐
相关产品推荐

