数据如何更新?

我有两列是我在图表中使用的信息,它根据我select的时间范围而变化。 主要问题是列长度可能不同,可以是5行,当我select另一个时间段时,可以是7行或更less,然后是5.图表中的数据是刷新的,但列数不是,例如我有这样的数据:

Tom 20 Susan 30 John 15 

所以图表会有三列,它们的颜色根据第一列中的值而不同,但是当我select另一个时间段时,数据会更改为:

  Peter 40 Patrick 70 Joe 36 Megan 57 Susan 74 

现在图表将包含只有前三个名字的三列:彼得,帕特里克,乔和列的颜色将与第一个图表相同。

我希望很容易理解我的问题,最主要的是图表的可视化不会像它应该的那样改变。 我添加了一部分代码:

 Sub Macro1() Dim MyRangex As Range Dim LastRow As Long Dim ChartRange1 As Range LastRow = Worksheets("Calculate").Cells(Rows.Count, "E").End(xlUp).row Set MyRangex = Worksheets("Calculate").Range("E2:E" & LastRow) Set ChartRange1 = Sheets("Calculate").Range("G2:G" & LastRow) ActiveChart.SeriesCollection(1).Select ActiveChart.SeriesCollection(1).XValues = MyRangex ActiveChart.SeriesCollection(1).Values = ChartRange1 For i = 1 To Worksheets("Calculate").Cells(9, 10).value ActiveChart.SeriesCollection(1).Points(i).Select Select Case Worksheets("Calculate").Cells(i + 1, 5).value Case Is = "Tom" With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 .Solid End With Case Is = "Susan" With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(0, 176, 240) .Transparency = 0 .Solid End With Case Is = "Joe" With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(255, 255, 0) .Transparency = 0 .Solid End With Case Is = "John" With Selection.Format.Fill .Visible = msoTrue .ForeColor.RGB = RGB(191, 191, 191) .Transparency = 0 .Solid End With End Select Next i End Sub 

您应该使用一个Worksheet_Change事件。 它必须驻留在工作表模块中。

 Private Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Me.Range("C2"), Target) Is Nothing Then MsgBox "data in C2 was changed" End If End Sub 

此示例中的MsgBox仅在单元格C2数据更改时才出现。 根据你如何改变你的新时期,这部分应该改变。


无论您手动还是自动更新您的期限,我确信下面的代码将为您工作。 (除非有这些名字的公式。)

使用要求:
1.将此代码放入工作表模块(不是在录制macros后出现的常规模块)。
2.将图表重命名为“MyChartName”,或将代码中的该名称replace为实际图表名称

 Private Sub Worksheet_Change(ByVal Target As Range) Dim MyRangex As Range Dim LastRow As Long Dim ChartRange1 As Range Dim i As Long Dim mySeries As Series If Not Intersect(Me.Range("E2:E100"), Target) Is Nothing Then LastRow = Worksheets("Calculate").Cells(Rows.Count, "E").End(xlUp).Row Set MyRangex = Worksheets("Calculate").Range("E2:E" & LastRow) Set ChartRange1 = Sheets("Calculate").Range("G2:G" & LastRow) Set mySeries = ActiveSheet.ChartObjects("MyChartName").Chart.SeriesCollection(1) mySeries.XValues = MyRangex mySeries.Values = ChartRange1 For i = 1 To Worksheets("Calculate").Cells(9, 10).Value With mySeries.Points(i).Format.Fill Select Case Worksheets("Calculate").Cells(i + 1, 5).Value Case Is = "Tom" .Visible = msoTrue .ForeColor.RGB = RGB(255, 0, 0) .Transparency = 0 .Solid Case Is = "Susan" .Visible = msoTrue .ForeColor.RGB = RGB(0, 176, 240) .Transparency = 0 .Solid Case Is = "Joe" .Visible = msoTrue .ForeColor.RGB = RGB(255, 255, 0) .Transparency = 0 .Solid Case Is = "John" .Visible = msoTrue .ForeColor.RGB = RGB(191, 191, 191) .Transparency = 0 .Solid End Select End With Next End If End Sub