2017-04-30 33 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