小编Ali*_*ice的帖子

VBA:使用默认颜色提取图表中线条的RGB值

问题

我想知道如何读取图表中自动指定颜色的当前RGB值,即使这需要将颜色冻结到其当前值(而不是在主题更改时更新它们,重新排序系列等)

用例

我的实际用例是我想让数据标签与折线图中的线条/标记的颜色相匹配.如果我通过方案或显式RGB值明确设置系列的颜色,这很容易,例如

' assuming ColorFormat.Type = msoColorTypeRGB
s.DataLabels.Format.TextFrame2.TextRange.Font.Fill.ForeColor.RGB= _
s.Format.Line.ForeColor.RGB
Run Code Online (Sandbox Code Playgroud)

但是,在自动分配系列颜色时执行此操作会生成白色标签.更具体地说,以下两个等式都成立

s.Format.Line.ForeColor.Type = msoColorTypeRGB 
s.Format.Line.ForeColor.RGB = RGB(255,255,255)  ' White
Run Code Online (Sandbox Code Playgroud)

然而,当然这条线不是白色的,而是来自主题的自动指定颜色.这表明颜色是自动分配的

s.Border.ColorIndex = xlColorIndexAutomatic
Run Code Online (Sandbox Code Playgroud)

我想有意义的是,颜色不会与问题系列一起存储.即使将索引存储到颜色方案中也通常不起作用,因为如果添加了另一个数据系列或有人重新排序数据,则Excel需要更改颜色.如果有某种方法可以自动识别当前的RGB值,我还是会喜欢它.

一个丑陋的解决方法

对于具有6个或更少条目的图表,一个简单的解决方法是利用主题颜色按顺序分配的事实,所以我可以做(例如)

chrt.SeriesCollection(1).DataLabels.Format.TextFrame2.TextRange.Font.Fill.ForeColor.ObjectThemeColor _
= msoThemeColorAccent1
Run Code Online (Sandbox Code Playgroud)

据推测,这可以扩展到TintAndShade一旦主题用尽后用于区分条目,但这是一个丑陋的黑客.

研究

有人(如何提取主题颜色)主要问同样的问题在这里,但它从来没有回答.有几个来源建议将已知主题颜色转换为RGB值的方法(例如此处此处),但这只是问题; 我不知道这种颜色是先验的,除了"这条线目前的颜色是什么".

excel vba colors excel-vba

10
推荐指数
1
解决办法
8828
查看次数

标签 统计

colors ×1

excel ×1

excel-vba ×1

vba ×1