如何使用vba中的变量遍历范围

时间:2015-05-13 18:08:41

标签: excel excel-vba vba

我试图在下面的范围内循环并获得运行时错误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

2 个答案:

答案 0 :(得分:1)

替换

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

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

一般情况下,请避免使用细胞定位细胞,而是从固定地址(如上面的“E10”)开始,并使用.Offset().Resize()的组合来调整细胞范围想要采取行动。

答案 1 :(得分:0)

我认为你的循环有正确的代码而你根本就没有粘贴它。

您对Cells的两次调用是指您想要的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))

理想情况下,您将定义对该工作表的引用以清理代码。在这种情况下,您也不必在Range前加上工作表。这两个想法相结合:

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))