【问题标题】:VBA Excel: Range of RGB for Colorindex compatibilityVBA Excel:用于 Colorindex 兼容性的 RGB 范围
【发布时间】:2015-01-26 05:26:32
【问题描述】:

我有一个在 Excel 2007 中创建的宏,它让值取决于源文件的字体颜色,如下所示(这段代码是循环的一部分):

 If Worksheets("Source1").Cells(i, j).Font.Color = RGB(165, 165, 165) Or Worksheets("Source1").Cells(i, j).Font.Color = RGB(117, 146, 60) Then
     Worksheets("Result").Cells(UnusedRow, 15).Value = "Closed"
 Else
     Worksheets("Result").Cells(UnusedRow, 15).Value = "Active"
 End If

这没有问题。

然而,奇怪的是,same 源文件中的 same 单元格在 使用 Excel 2013 打开时具有不同的 RGB 值:RGB(165, 2007年的165, 165) 2013年变成RGB(166, 166, 166),2007年的RGB(117, 146, 60)变成2013年的RGB(118, 147, 60)。

这就是为什么我想为字体颜色中的每个数字使用一个小范围,例如源文件中的 RGB(x, y, z):

 If x => 164 And x <= 167 And y => 164 And y <= 167 And z => 164 And z <= 167 Then 
   ...

谁能告诉我如何正确编码?谢谢!

【问题讨论】:

  • 如果我们谈论逻辑,Excel 不应该首先更改 RGB 值。这不是映射,而是在 RGB(x,y,z) 中定义 x、y 和 z 的范围。我只需要将接近 RGB(165,165,165) 和 RGB(117,146,60) 的任何 RGB 值连接到“已关闭”状态,因此它实际上会很快停止。
  • FWIW,我无法重现您的问题。此外,我在其他地方找不到任何提及。您是否将其简化为一个非常简单的测试,例如,在 Excel 2007 中使用 ActiveCell.Font.Color = RGB(165, 165, 165) 和 Excel 2013 中的 Debug.Print ActiveCell.Font.Color = RGB(165, 165, 165) 设置值?在这两种情况下,这样做都会在 2013 年的即时窗口中为我带来 True
  • 我刚刚注意到您的帖子标题指的是ColorIndex。你的代码没有引用它,我可以看到。这两者当然是不相容的。它们不会导致您看到的差异,所以我猜这只是一个错字?
  • 问题是我无法控制源文件,所以我无法自己设置值。在源文件中,用户通过单击 Excel 的调色板来设置字体的颜色索引(没有 VBA 的手动)。将其保存在 Excel 2007 中并在 Excel 2013 中打开会导致不同的 RGB 值。
  • 我去了网站,但我很偏执所以没有打开。但是,如果我在 Excel 2007 中创建一个并在 Excel 2013 中打开,我看不到您在描述什么。鉴于相当特殊的问题,我只需使用 OR 语句检查特定值。如果您确定它是基于版本的,您可以检查正在运行的 Excel 版本(互联网搜索会找到)。祝你好运!顺便说一句,在其中一个 cmets 中将“@”放在用户名的开头会向我们发送通知,告诉我们您向我们提出了一些问题。

标签: excel vba colors rgb


【解决方案1】:

好的,我的大脑终于浮出水面,我得到了答案。

使用ColorIndex 代替Color。这是他们在调色板中选择的颜色位置的索引。

我并不是说这是一个很棒的系统(它不是),但考虑到您的限制 - 依靠用户点击某个颜色按钮,它和您将获得的一样好。

我认为。

【讨论】:

  • 但是等一下...我没有 excel 2007 测试库,所以我无法检查,但您不是已经反驳了 OP 声称的行为吗?为什么要偏离这条线?很抱歉,但我只是好奇……如果 OP 说的是真的,那么它的宝贵信息。
  • @CoolBlue。 ColorIndex 属性指的是当您更改字体颜色时出现的调色板中大约 50 种颜色。 Color 属性指的是 RGB。是的,在一个文件中设置为 RGB (Color) 的单元格在其他版本中确实具有相同的 RGB。然而,调色板颜色是可定制的(选项>保存>颜色),因此 ColorIndex 的 RGB 可能因用户或计算机而异。也许 MS 将它们从一个版本更改为另一个版本。无论如何,您不能指望相同的位置 (ColorIndex) 是相同的 RGB。所以,我只是检查ColorIndex(位置)。
  • 啊,好吧,在你发表评论之前,一切都很清楚。另一种可能性是粗略计算三个 RGB 数字的方差。如果它们或多或少相同,则您有黑白阴影(例如 16X、16X、16X)。如果有很大的“差异”,那么它是彩色的(例如 118,14X,60)。
  • @DougGlancy 这将是一个选项(我正在考虑),但请考虑以下情况:Microsoft 决定未来的 Excel 版本将具有更大的调色板(例如,一个额外的列颜色),因此 ColorIndex 将不再匹配。但是,源文件中的字体颜色仍应在 RGB(16x, 16x, 16x) 或 RGB(11x, 14x, 60) 附近。 x、y、z 附近的范围不是最安全的方法吗?
  • 我能想到这个系统可能出错的许多情况。我确实认为以上回答了您现在看到的问题。就面向未来而言,我建议您让他们在文件中添加“状态”列,最好进行一些数据验证。否则,当然,请查看我提到的链接并尝试捕获一个范围,但我看不出您如何对其充满信心。祝你好运!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-05-22
  • 1970-01-01
  • 2019-12-25
  • 1970-01-01
  • 1970-01-01
  • 2019-04-06
相关资源
最近更新 更多