我已经找到了用于引用表(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