2017-04-30 101 views
0

我有一個圖表集合系列。我想將收集系列的範圍向右擴展一列。下面的代碼工作。但是,它假定我知道收集系列的範圍(下例中的「B36:DA36」)。事實上,我希望收集系列的初始範圍(在調整大小之前)能夠以動態的方式定義,因爲它每天都在變化,並將其定義爲下面的內容,因此無法完成這項工作。設置系列集合爲範圍 - VBA - Excel

Sub resize_collection_series() 

Dim NumRows As Long 
Dim NumCols As Long 
Dim Rng As Range 

Set Rng = Range("B36:DA36") 

NumRows = Rng.Rows.Count 
NumCols = Rng.Columns.Count 

Worksheets("Sheet1").Activate 
ActiveSheet.ChartObjects("Chart 6").Activate 
ActiveChart.SeriesCollection(1).Select 
ActiveChart.SeriesCollection(1).Values = Rng.Resize(, NumCols + 1) 
ActiveChart.SeriesCollection(1).XValues = Rng.Resize(, NumCols + 1) 
End Sub 

我想是這樣的withouth的成功:

Set Rng = Worksheets("Sheet1").ChartObjects("Chart 6").SeriesCollection(1) 
Set Rng = Worksheets("Sheet1").ChartObjects("Chart 6").SeriesCollection(1).Values 

謝謝您的幫助!

+0

究竟是你想設置一個'Range'到'的SeriesCollection(1)'?你的'Rng'動態到底如何?它轉向哪裏?什麼列或行? –

+0

系列集合的範圍從A12開始:M12。每天我都會在右側添加一個新的數據列,即第1天= A12:N12,第2天= A12:O12。添加的數據應該通過宏包含在圖表中。僅供參考:我有很多圖表,最後我想通過宏觀更新。我只需要弄清楚如何做到這一點的原則。如果你問我「你是如何設置範圍到SeriesCollection(1)」的。這無疑是我的問題;-) – glamdring

回答

0

請嘗試下面的代碼,將「圖表6」SeriesCollection(1)動態設置爲第12行現有列的數量(根據您的意見)。

代碼

Option Explicit 

Sub resize_collection_series() 

Dim NumRows As Long 
Dim NumCols As Long 
Dim Rng As Range 
Dim LastCol As Long 

Dim MyCht As ChartObject 
Dim Ser As Series 

' get dynamic last column at row 12 
LastCol = Cells(12, Columns.Count).End(xlToLeft).Column 

' set the Range dynamic 
Set Rng = Range(Cells(12, 1), Cells(12, LastCol)) 

' set "Chart 6" to MyCht Variable 
Set MyCht = Worksheets("Sheet1").ChartObjects("Chart 6") 
With MyCht 
    Set Ser = .Chart.SeriesCollection(1) 
    With Ser 
     .Values = "=" & Rng.Address(False, False, xlA1, xlExternal) 

    End With 
End With 

End Sub 
+0

謝謝。代碼搜索最後一列。如果整行12有內容,代碼將如何更改。它在每個單元格中包含0,因爲將公式插入到這些單元格中。當文件中其他位置的單元格填充了內容時,第12行中的單元格將給出值> 0。因此,代替搜索最後一行的代碼,我正在尋找將我的SeriesCollection擴展一個單元的代碼。或者,也許有人可以改變你的代碼,它尋找最後一列不是0? – glamdring

+0

如果你想去到最後一列,你的代碼工作得很好:-) – glamdring