用dynamic数量的数据行绘制折线图

我想根据重量跟踪表上的dynamic行数在汇总表上绘制折线图(即每天添加另一行数据)

我试图让我的线图看起来完全像例子(相同的颜色等)。 现在,我的代码编译,但graphics不出现在任何地方。

我想根据重量跟踪表上的动态行数在汇总表上画一个折线图(即我每天添加更多的数据)

我试图让我的线图看起来完全像例子(相同的颜色等)

以下是电子表格https://drive.google.com/file/d/0B1GLuBx-ROnhSnJpdDRFTFVUbDA/edit?usp=sharing

Private Sub WeightTrackingChart() 'variable declaration Dim i As Long Dim LastRow As Long Dim WTchart As Shape Dim ws As Worksheet 'Find the last used row LastRow = Sheets("Weight Tracking").Range("B3").End(xlUp).Row 'Looping from fifth row till last row which has the data For i = 6 To LastRow 'Prints chart to Summary sheet Set ws = Sheets("Weight Tracking") 'deletes old charts ' ws.Shapes("WTchart").Delete 'Adds new chart to the sheet Set WTchart = ws.Shapes.AddChart(xlLine, 15, 750, 500, 400) 'Sets chart name WTchart.Name = "WTchart" 'now the line chart is added...setting its data source here With Sheets("Weight Tracking") WTchart.SetSourceData Source:=.Range(.Cells(i, 1), .Cells(i, "F")) End With Next End Sub 

首先,我不是使用Cells(x,y)的一个巨大的粉丝,这只是个人问题,所以你会看到我已经写了它,我感觉舒适,但随意调整,只要你愿意。 看起来好像你的循环创build了许多图表,而不是增加一个新的系列到现有的。 为此我改变了循环开始的地方。 此外,我也激活图表,以允许在我的代码中使用ActiveChart。 我不知道如何解决这个问题,如果其他人这样做是很棒的学习。

另外要注意的是将来使用,确保你正在循环。 当你设置循环运行,直到最后一行,你实际上说是运行7次,而不是只有5.而且,这应该是长度下去的数据,而不是循环(系列创build)。 对于长度我只是把你的第一行和最后一行之间的差异,并告诉它抵消了这一点。

无论如何,我希望这可以帮助你。 它对我来说非常有效。

 Private Sub WeightTrackingChart() 'variable declaration Dim i As Long Dim LastRow As Long Dim WTchart As Shape Dim ws As Worksheet 'Find the last used row LastRow = Sheets("Weight Tracking").Range("B3").End(xlDown).Row Length = LastRow - Sheets("Weight Tracking").Range("B3").Row 'Prints chart to Summary sheet Set ws = Sheets("Weight Tracking") 'deletes old charts ' ws.Shapes("WTchart").Delete 'Adds new chart to the sheet Set WTchart = ws.Shapes.AddChart(xlLine, 15, 150, 500, 400) 'Sets chart name WTchart.Name = "WTchart" 'now the line chart is added...setting its data source here With Sheets("Weight Tracking") 'Looping from fifth row till last row which has the data For i = 0 To 4 WTchart.Select ActiveChart.SeriesCollection.NewSeries ActiveChart.SeriesCollection(i + 1).Name = .Range("B2").Offset(0, i + 1) ActiveChart.SeriesCollection(i + 1).Values = Range(.Range("B2").Offset(1, i + 1), .Range("B2").Offset(Length + 1, i + 1)) ActiveChart.SeriesCollection(i + 1).XValues = Range(.Range("B3"), .Range("B3").Offset(Length, 0)) Next End With End Sub 

PS在Google云端硬盘上发布电子表格的主要荣誉使我的生活变得如此简单。