使用范围时添加数据系列失败

时间:2017-04-07 16:00:06

标签: vba excel-vba range worksheet excel

我有以下循环尝试为一系列列附加数据系列:

Do Until wb.Worksheets("RTS Raw Data").Cells(1, k) = ""
  Set c1 = Cells(3, k)
  Set c2 = Cells(lr, k)
  ActiveChart.SeriesCollection.Add Source:=wb.Worksheets("RTS Raw Data").Range(Cells(3, k), Cells(lr, k))
  ActiveChart.SeriesCollection(11 + k).XValues = wb.Worksheets("RTS Raw Data").Range("B3:B" & lr)
  ActiveChart.SeriesCollection(11 + k).Name = wb.Worksheets("RTS Raw Data").Cells(2, k)

  If (wb.Worksheets("RTS Raw Data").Cells(3, k) = "-999") Then
    mcwb.Shapes("CheckBox" & 8 + k).TextFrame.Characters.Text = "Unused"
  Else
    mcwb.Shapes("CheckBox" & 8 + k).TextFrame.Characters.Text = wb.Worksheets("RTS Raw Data").Cells(2, k)
  End If

  ActiveChart.SeriesCollection(11 + k).AxisGroup = xlPrimary

  k = k + 1
Loop

代码在ActiveChart.SeriesCollection.Add Source:=wb.Worksheets("RTS Raw Data").Range(Cells(3, k), Cells(lr, k))上失败,但在使用.Range("E3:E" & lr)时不会失败。

提前致谢。

2 个答案:

答案 0 :(得分:1)

看起来ActiveChart不在RTS Raw Data上。

在您的代码中,Range被定义为RTS Raw Data,但Cells的两次出现不符合表单,因此它使用的是活动表。
ActiveChart.SeriesCollection.Add Source:=wb.Worksheets("RTS Raw Data").Range(Cells(3, k), Cells(lr, k))

尝试使用With...End With块来缩短代码:

With wb.Worksheets("RTS Raw Data")
    ActiveChart.SeriesCollection.Add Source:=.Range(.Cells(3, k), .Cells(lr, k))
End With

这与写作相同:

 ActiveChart.SeriesCollection.Add Source:=wb.Worksheets("RTS Raw Data").Range(wb.Worksheets("RTS Raw Data").Cells(3, k), wb.Worksheets("RTS Raw Data").Cells(lr, k))  

https://msdn.microsoft.com/en-us/library/wc500chb.aspx

答案 1 :(得分:0)

为了使所有对象(RangeCells)符合“RTS原始数据”表格,使用With wb.Worksheets("RTS Raw Data"),并使用{{1}将下面的所有对象嵌套(代码也更清晰,更短)。

此外,如果您定义.,它还可以帮助您以后编写和调试它。

尝试以下代码:

Dim Ser As Series