2017-08-01 68 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