如何使用vba中的variables循环范围

我想循环下面的范围,并得到运行时错误1004.突出显示的行是这里:

ActiveChart.SeriesCollection(i).Values = Worksheets("Chart Help").Range(Cells(10 + j, 5), Cells(10 + j, 1006)) 

谁能告诉我什么是错的?

 If Worksheets("Chart Help").Cells(4, 9 + j) <> " " Then ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(i).Name = Worksheets("Chart Help").Cells(4, 9 + j) ActiveChart.SeriesCollection(i).XValues = Worksheets("Chart Help").Range("J5:J1006") ActiveChart.SeriesCollection(i).Values = Worksheets("Chart Help").Range(Cells(10 + j, 5), Cells(10 + j, 1006)) ActiveChart.SeriesCollection(i).Select With Selection.Format.Line .Visible = msoTrue .ForeColor.ObjectThemeColor = msoThemeColorAccent6 .ForeColor.TintAndShade = 0 .ForeColor.Brightness = 0 .Transparency = 0 End With i = i + 1 End If j = j + 1 

我假设你的循环有正确的代码,你根本就没有粘贴。

Cells 2次调用是指ActiveSheet而不是像您打算的Chart Help工作表。 您需要在Cells添加Worksheets("Chart Help").Cells不会出错。

像这样的东西:

 ActiveChart.SeriesCollection(i).Values = Worksheets("Chart Help").Range(Worksheets("Chart Help").Cells(10 + j, 5), Worksheets("Chart Help").Cells(10 + j, 1006)) 

理想情况下,您可以定义对该工作表的引用来清理代码。 在这种情况下,您也不必在工作表中添加前缀。 这两个想法结合起来:

 Dim sht_chart As Worksheet Set sht_chart = Worksheets("Chart Help") ActiveChart.SeriesCollection(i).Values = Range(sht_chart.Cells(10 + j, 5), sht_chart.Cells(10 + j, 1006)) 

更换

 .Range(Cells(10 + j, 5), Cells(10 + j, 1006)) 

 .Range("E10").Offset(j,0).Resize(1, 1001) 

一般情况下,避免使用单元格来定位单元格,而是从一个固定地址(如上面的“E10”)开始,并使用.Offset().Resize()来调整要执行的单元格的范围。