You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Access中如何修改饼图系列的填充颜色?

解决Access图表按类别设置数据点颜色的问题

问题分析

你的查询通过UNION将Ricavi和Costi合并成了单个数据系列,所有数据点都归属于同一个系列,因此直接修改整个系列的颜色(ChartSeriesCollection.Item(0))无法区分Costi和Ricavi两类数据。另外,窗体的Open/Load事件触发时,图表数据可能还未完全加载,导致代码无法生效。

解决方案

需要遍历图表的每个数据点,根据CostiRicavi字段的取值("Costi"或"Redditività")单独设置颜色,并且将代码放在图表的AfterUpdate事件或者窗体的Current事件中(确保数据加载完成后执行)。

代码实现

Private Sub CostiRicaviGR_AfterUpdate()
    Dim chartSeries As ChartSeries
    Dim dataPoint As ChartDataPoint
    Dim rs As Recordset
    Dim i As Integer
    
    ' 打开查询记录集用于匹配数据点类别
    Set rs = CurrentDb.OpenRecordset("SELECT IDtrattativa, NomeCognome, [Ricavi] AS Valore, ""Redditività"" AS CostiRicavi FROM qryAnalisiOperazione UNION SELECT IDtrattativa, NomeCognome, [costi], ""Costi"" FROM  qryAnalisiOperazione;")
    Set chartSeries = Me.CostiRicaviGR.ChartSeriesCollection.Item(0)
    
    i = 0
    rs.MoveFirst
    Do While Not rs.EOF
        Set dataPoint = chartSeries.ChartDataPointCollection.Item(i)
        ' 根据类别设置对应颜色
        If rs!CostiRicavi = "Costi" Then
            dataPoint.FillColor = RGB(255, 0, 0) ' 红色
            dataPoint.BorderColor = RGB(200, 0, 0) ' 深红边框
        ElseIf rs!CostiRicavi = "Redditività" Then
            dataPoint.FillColor = RGB(0, 200, 0) ' 绿色
            dataPoint.BorderColor = RGB(0, 150, 0) ' 深绿边框
        End If
        rs.MoveNext
        i = i + 1
    Loop
    
    rs.Close
    Set rs = Nothing
    Set chartSeries = Nothing
End Sub

关键注意点

  • 你之前代码中的RGB(200, 300, 111)是无效的,RGB颜色值的范围必须是0-255,超出范围的数值会被自动截断,导致颜色不符合预期
  • 必须确保图表数据完全加载后再执行颜色设置,AfterUpdate事件是最适合的时机,避免Open/Load事件中数据未就绪的问题
  • 如果查询结果有排序,要保证记录集的顺序和图表数据点的顺序一致,否则颜色会匹配错误

内容的提问来源于stack exchange,提问作者diego

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.09 18:22:26