2017-08-01 57 views
2

我已发现解决方案,为引用一个整行/列或表(e.g. The VBA Guide To ListObject Excel Tables)范围内的单细胞,但不是在特定的范围的一部分。仅作参考Excel表格数据本体范围带VBA

示例: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 

但这不起作用。有没有办法做我想用这一行做什么?我应该解决它并寻求不同的解决方案吗?

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

回答

0

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

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 
0

您可以迭代表格的ListColumns,并使用偏移量和调整大小从每个“ListColumn”的DataBodyRange获取特定的一组行。

对于第4行到第10行,您需要偏移3行,然后调整7行的大小。您可以在示例代码中调整这些数字下面,如果有趣的行变化的数量,或者如果第一排指标的变化:

Option Explicit 

Sub TableSection() 

    Dim ws As Worksheet 
    Dim lst As ListObject 
    Dim lcl As ListColumn 
    Dim i As Long 
    Dim var As Variant 

    Set ws = ThisWorkbook.Worksheets("Sheet1") '<-- change to your sheet 
    Set lst = ws.ListObjects("Table1") '<-- change to your table 

    For Each lcl In lst.ListColumns 
     ' change 3 and 7 depending on the rows you are interested in 
     var = lcl.DataBodyRange.Offset(3, 0).Resize(7, 1) 
    Next lcl 

End Sub