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