我已经找到了用于引用表(e.g. The VBA Guide To ListObject Excel Tables)中的整个行/列或单个单元格(而不是特定范围)的解决方案。

示例:Table1的DataBodyRange是3列和10行,我需要绘制每列中第4-10行的数据(以编程方式,因为表是动态的,并且如果列为列,我希望能够重新绘制该图添加/删除)。

我希望语法像

Sub reDrawChart()

Set sourcedata = ActiveSheet.ListObjects("Table1")
Set cht = Worksheets("Sheet1").ChartObjects(1).Chart

'Delete existing series
cht.ChartArea.ClearContents

'Add new series
With cht.SeriesCollection.NewSeries
    For i = 1 To nColumns
        .Name = sourcedata.HeaderRowRange(i)
        .Values = sourcedata.DataBodyRange(4:10, i) '<-- Touble spot
    Next i
End With

End Sub


但这是行不通的。有什么方法可以完成我要处理的这一行吗?我应该解决它并寻求其他解决方案吗?

我还想避免使用.Select,因为在Mac OS上,感觉任何使VBA口吃的代码都有50/50崩溃到桌面的机会。

最佳答案

试试这个循环而不是你的循环:

    For i = 1 To sourceData.ListColumns.count
      With cht.SeriesCollection.NewSeries
        .name = sourceData.ListColumns(i).name
        .values = sourceData.ListColumns(i).DataBodyRange. _
          Offset(3).Resize(sourceData.ListRows.count - 3)
      End With
    Next i

10-07 20:52