Access VBA中根据系列名称设置Modern Chart系列颜色的方法咨询
Access Modern Chart系列颜色设置VBA优化方案
原代码存在的问题
- 循环中通过
i索引反向访问系列,但For Each是正向遍历,容易导致系列与颜色不匹配 - 重复调用
DLookup,数据库查询次数过多,效率低下 - 未处理系列名称不匹配的情况
优化后的代码
Dim colorDict As Object Set colorDict = CreateObject("Scripting.Dictionary") ' 提前从表中读取所有需要的名称和颜色,存入字典减少查询次数 colorDict(DLookup("[MsgPrompot]", "tblPrompots", "[MsgID] = 40")) = Nz(DLookup("lngColor", "tblPrompots", "[MsgID] = 40"), 0) colorDict(DLookup("[MsgPrompot]", "tblPrompots", "[MsgID] = 41")) = Nz(DLookup("lngColor", "tblPrompots", "[MsgID] = 41"), 0) colorDict(DLookup("[MsgPrompot]", "tblPrompots", "[MsgID] = 42")) = Nz(DLookup("lngColor", "tblPrompots", "[MsgID] = 42"), 0) With MyChart For Each series In .ChartSeriesCollection ' 检查当前系列名称是否在字典中存在对应颜色 If colorDict.Exists(series.name) Then series.BorderColor = colorDict(series.name) series.FillColor = colorDict(series.name) End If Next End With Set colorDict = Nothing
关键修改说明
- 使用字典缓存数据:一次性读取所有需要的系列名称和对应颜色,避免循环中重复执行数据库查询,提升代码效率
- 直接操作当前系列对象:
For Each遍历过程中直接使用series对象设置颜色,无需通过索引定位,避免索引匹配错误 - 增加存在性判断:通过
colorDict.Exists检查系列名称是否有对应颜色,避免因名称不匹配导致的错误
内容的提问来源于stack exchange,提问作者Gourge Gourginian
相关产品推荐
相关产品推荐

