如何通过For循环为VBA图表添加60+命名区域?下标越界报错求解
问题分析与解决
报错核心原因
- 代码硬编码操作
Sheet1的图表,但你的图表实际在Sheet8,找不到指定的Chart对象,触发「下标越界」。 - 命名区域名称拼接错误:你的命名是
Log_Normal_1格式,但代码里写的是"Log_Normal" & i,少了下划线,导致无法匹配对应命名区域。 - 额外风险:如果循环次数(比如24)超过实际存在的命名区域数量,也会触发该错误。
修正后的代码
Sub Calc() Dim i As Integer ' 根据实际命名区域数量调整循环范围 For i = 1 To 24 AddChartToSheet8 i Next i End Sub Sub AddChartToSheet8(i As Integer) Dim targetChart As ChartObject Dim targetName As String ' 拼接正确的命名区域名称 targetName = "Log_Normal_" & i ' 先检查命名区域是否存在,避免报错中断 On Error Resume Next Dim namedRange As Range Set namedRange = ThisWorkbook.Names(targetName).RefersToRange On Error GoTo 0 If namedRange Is Nothing Then MsgBox "命名区域 " & targetName & " 不存在,跳过该系列" Exit Sub End If ' 定位到Sheet8的图表(若图表名称不是"Chart",请修改为实际名称) Set targetChart = ThisWorkbook.Worksheets("Sheet8").ChartObjects("Chart") With targetChart.Chart.SeriesCollection.NewSeries .Name = targetName .Values = namedRange End With End Sub
额外注意事项
- 确认Sheet8里的图表对象名称确实是
"Chart",若不是,可在Excel开发工具的属性窗口查看实际名称,再修改代码里的ChartObjects("Chart")。 - 若命名区域数量不是24,调整
For i = 1 To 24的上限值。 - 代码增加了命名区域存在性检查,避免因单个区域缺失导致整个循环中断。
内容的提问来源于stack exchange,提问作者user26829351
相关产品推荐
相关产品推荐

