Excel VBA将数据添加到图表

时间:2017-11-23 09:59:12

标签: excel vba excel-vba charts

您好,我有一个小问题,可以将数据添加到现有图表中。

现在我有一个工作表,其中包含工作表第2行中多年的月份数据系列。所以月份是例如B2 1.2017,C2 2.2017,并且在3,4,5,6,7和8行中总是存在该月的数据。

现在我只想让我的宏将新月加上下面行的数据添加到现有图表中。

到目前为止,我的代码是:

<div id="wrapper">
  <div id="col-1">
    RANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXTRANDOMTEXT
  </div>
  <div id="col-2"></div>
</div>

现在这只会创建新的数据系列,但实际上没有新的数据添加到图表中。

2 个答案:

答案 0 :(得分:2)

下面的代码可能看起来有点长,但它是向数据库添加新Series到现有图表的最安全的方法。

我设置了所有必要的Objects,因此代码将为&#34;安全防范&#34;可以。

<强>代码

Option Explicit

Sub AddSeriestoChart()

Dim ws As Worksheet
Dim ChtRng As Range
Dim ChtObj As ChartObject
Dim Ser As Series

' set the Worksheet object
Set ws = ThisWorkbook.Worksheets("Summary")

' Set the Chart Object
Set ChtObj = ws.ChartObjects("Chart")

' Set the Range of the Chart's source data
Set ChtRng = ws.Range("B2:B8")

With ChtObj
    ' add a new series to chart
    Set Ser = .Chart.SeriesCollection.NewSeries

    ' set the source data of the new series
    Ser.Values = "=" & ChtRng.Address(False, False, xlA1, xlExternal)
End With

End Sub

修改1 :要修改现有的Series数据,请使用以下代码:

With ChtObj          
    For i = 1 To .Chart.SeriesCollection.Count
        Set Ser = .Chart.SeriesCollection(i)

        ' set the source data of the new series
        Set ChtRng = ws.Range("B" & i + 2)
        Ser.Values = "=" & ChtRng.Address(False, False, xlA1, xlExternal)

        Set ChtRng = Nothing
    Next i
End With

答案 1 :(得分:0)

这就是我要用的东西

wsMetric.ChartObjects("Chart").Chart

'This one will link data from another workbook
.SeriesCollection(1).Values = "='[" & wb.Name & "]" & ws.Name & "'!$" & sCol & "$" & lRow  & ":$" & sCol2 & "$" & lRow2 
'Debug.Print "='[" & wb.Name & "]" & ws.Name & "'!$" & sCol & "$" & lRow  & ":$" & sCol2 & "$" & lRow2 'Returns ='[Book1.xlsm]Sheet1'!$A$1:$A$11


'This one will link data from the same workbook, same or different sheet
.SeriesCollection(1).Values = "=" & ws.Name & "!$" & sCol & "$" & lRow & ":$" & sCol2 & "$" & lRow 2
'Debug.print "=" & ActiveSheet.Name & "!$" & scol & "$" & lrow & ":$" & scol2 & "$" & lrow2 'Returns =Sheet1!$A$1:$A$11
End With

这不使用.Activate并直接访问图表