【问题标题】:Run macro on Excel Graph when I select new data选择新数据时在 Excel Graph 上运行宏
【发布时间】:2015-11-26 10:09:32
【问题描述】:

正如标题所说,我希望能够在为图表选择系列时自动运行我的宏。 我需要将最后一根柱子涂成红色,我可以用我的宏来做到这一点,但是当我选择一个新的数据系列时,红色柱子是前一个数据选择的最后一根柱子。因此,如果我在第一个选择中有 4 个值,而我为下一个选择选择了 7 个值,我最终将第 4 个条带为红色。

这是我使用的宏

Sub CustomChartMacro() 
Application.ScreenUpdating = True 
Dim w As Worksheet 
Dim chtSeries As Excel.Series 
Dim i As Long 
Dim a As Long 

    'Call CustomChartMacro a = ActiveChart.SeriesCollection(1).Points.Count * ActiveChart.SeriesCollection.Count 

   For Each chtSeries In ActiveChart.SeriesCollection


     With chtSeries
            For i = a To .Points.Count

                If .Values(i) = a Then
                    .Points(i).Interior.Color = RGB(204, 9, 47)
                Else
                    .Points(i).Interior.Color = RGB(89, 89, 91)
                End If
            Next i


    End With 

 Next chtSeries

 End Sub

感谢您的建议。

【问题讨论】:

标签: vba excel


【解决方案1】:

更新

如果您的图表在图表工作表中,您可以使用Chart_Select 事件自动运行此代码。每次单击图表中的系列时,代码都会触发。

右键单击图表工作表选项卡名称并选择查看代码并为图表工作表复制此模块:

Private Sub Chart_Select(ByVal ElementID As Long, ByVal Arg1 As Long, ByVal Arg2 As Long)

 If ElementID = xlSeries Then CustomChartMacro

End Sub

下面的代码怎么样。它将检查该点是否是系列中的最后一个点并将其颜色设置为红色,否则将所有颜色设置为黑色。

Sub CustomChartMacro()

Application.ScreenUpdating = True
Dim w As Worksheet
Dim chtSeries As Excel.Series
Dim i As Long
Dim a As Long

For Each chtSeries In ActiveChart.SeriesCollection

    With chtSeries

        a = .Points.Count

        For i = 1 To a

            If i = a Then

                .Points(i).Interior.Color = RGB(204, 9, 47)

            Else

                 .Points(i).Interior.Color = RGB(89, 89, 91)

            End If

        Next i


    End With

Next chtSeries

End Sub

【讨论】:

  • 是的,它完成了工作,但是当我切换到新系列时,它不会自动更新颜色。
  • 是的,您每次都必须运行它...请参阅上面的评论以及ChartEvents 的链接,以便能够根据图表事件自动运行代码
  • 如果您的图表将被嵌入,您可以使用此link
  • 嘿,感谢您的积极响应。它确实有效,但它适用于 Chart_Select,所以我仍然需要选择它。我正在尝试让 Chart_SeriesChange 工作,因为我希望它能够立即更新。我是否正确理解 Chart_SeriesChange?如果我更改数据系列,它将运行子?
  • 是的,也许没有明确的方法可以做到这一点。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多