Excel 条形图需要我点击更新-有办法吗?

Excel 条形图需要我点击更新-有办法吗?,excel,vba,Excel,Vba,我创建了一个条形图,它显示了建筑物的图形表示 它已被有条件地格式化,用于将成本放在某一楼层上时——该楼层在条形图上以红色突出显示 然后我找到了一个VBA,当有条件格式化的单元格颜色改变时,它会将条形图系列的颜色改变为红色或灰色。我的编码知识非常有限,这是我想要发展的东西 但是,当我添加成本时,它不会自动更改条形图。它需要我点击图表,然后它会更新并变成红色 有没有办法通过代码来解决这个问题,这样当成本增加时,它会立即将地板改为红色 我在网上查找了一些刷新选项/计算选项,但是我的知识不是最好的,我可

我创建了一个条形图,它显示了建筑物的图形表示

它已被有条件地格式化,用于将成本放在某一楼层上时——该楼层在条形图上以红色突出显示

然后我找到了一个VBA,当有条件格式化的单元格颜色改变时,它会将条形图系列的颜色改变为红色或灰色。我的编码知识非常有限,这是我想要发展的东西

但是,当我添加成本时,它不会自动更改条形图。它需要我点击图表,然后它会更新并变成红色

有没有办法通过代码来解决这个问题,这样当成本增加时,它会立即将地板改为红色

我在网上查找了一些刷新选项/计算选项,但是我的知识不是最好的,我可能没有正确地添加它

代码从这里开始

Sub CellColorsToChart()

    'Updateby Extendoffice

    Dim xChart As Chart
    Dim I As Long, J As Long
    Dim xRowsOrCols As Long, xSCount As Long
    Dim xRg As Range, xCell As Range
    On Error Resume Next

    Set xChart = ActiveSheet.ChartObjects("Euston Tower").Chart
    If xChart Is Nothing Then Exit Sub
    xSCount = xChart.SeriesCollection.Count

    For I = 1 To xSCount
        J = 1
        With xChart.SeriesCollection(I)
            Set xRg = ActiveSheet.Range(Split(Split(.Formula, ",")(2), "!")(1))

            If xSCount > 4 Then
                xRowsOrCols = xRg.Columns.Count
            Else
                xRowsOrCols = xRg.Rows.Count
            End If

            For Each xCell In xRg
                .Points(J).Format.Fill.ForeColor.RGB = ThisWorkbook.Colors(xCell.DisplayFormat.Interior.ColorIndex)
                .Points(J).Format.Line.ForeColor.RGB = ThisWorkbook.Colors(xCell.DisplayFormat.Interior.ColorIndex)
                J = J + 1
            Next
        End With
    Next
End Sub

我将计算/刷新放在J=J+1之后,但这不起作用。

如果用手更改值,则必须使用工作表\u change

您需要将此代码放在工作表中,而不是模块中:

否则,如果计算更改了值,则必须使用工作表\u Calculate

如下

Private Sub Worksheet_Calculate() 
 Call CellColorsToChart
End Sub
如果您只想在更改时刷新图表,我建议您使用。刷新


请随时给我留下反馈,以便我可以在需要时改进我的答案

该代码中没有任何内容要求您选择图表,因此我怀疑问题实际上在于您如何触发此代码。@Rory-感谢您的回复。是一节;设置xChart=ActiveSheet.ChartObjectEuston Tower.Chart,选择图表的位置?该图表称为Euston Tower,不需要您选择该图表。您是如何运行此代码的?为什么不使用图表。Refresh@Rory我右键点击图表,然后分配了宏-这是错误的吗?也许还可以根据工作表的更新方式给工作表\u Calculate选项。他说他给自己加了值,但我要加上另一个way@Dorian感谢您提供的信息,我输入了您上面提到的.Refresh选项,但该选项不起作用。@JackLewis然后使用第二个选项调用您的sub@Dorian,做得很好-谢谢你的帮助,也谢谢大家抽出时间来看看!
Private Sub Worksheet_Calculate() 
 Call CellColorsToChart
End Sub
Private Sub Worksheet_Change(ByVal Target as Range)       
  ActiveSheet.ChartObjects("Euston Tower").Chart.Refresh
End Sub