【问题标题】:Detect the Conditional color of a cell检测单元格的条件颜色
【发布时间】:2017-09-17 17:27:29
【问题描述】:

我正在将 Excel 中的邮件合并到 Word 中,我需要复制一些单元格的背景颜色以及内容。

在这里,我了解到我可以添加一个帮助列,并插入一个自定义函数(类似于 Selection.Interior.Color)来检测所需单元格的代码。我打算让邮件合并悄悄地将该代码传递给 Word,宏会在其中看到它并使用它为相应的表格单元格着色。

很遗憾,Selection.Interior.Color 仅检测单元格的自然基础颜色,而不是条件格式的颜色。

有没有办法检测条件格式指定的颜色?

(有 35 个不同的列使用至少 8 组不同的条件规则)。

结论:这些解决方案似乎有效,但我决定避免向 Excel 工作表添加数据或宏。相反,我在 Word 中放置了一个宏,它基本上复制了条件格式功能。它很慢,但我认为它最终更干净。

谢谢大家。

【问题讨论】:

  • Range.DisplayFormat.Interior.Color 但在 Excel 2010 之前不可用
  • @Slai 不幸的是,根据msdn.microsoft.com/en-us/library/office/…,“DisplayFormat”在用户定义的函数中不起作用
  • 看起来真的很痛苦。这里的好指南:cpearson.com/Excel/CFColors.htm
  • @ShawnV.Wilson 你检查了吗?我只是尝试了一个非常简单的 UDF 和非原色,并且能够显示看起来合适的结果。
  • 您可以使用 Excel 中的事件来应用代码,或者让您的 Word 代码访问工作簿并使用 DisplayFormat 读取单元格颜色。

标签: excel vba


【解决方案1】:

正如@David 所说,这似乎很痛苦。但是,如果条件格式仅包含“传统”标准 excel 颜色(请参阅here),则以下内容似乎可以正确响应(未经过详尽测试)。 A 列(第 1 到 12 行)包含从 1 到 12 的值,并且对这些单元格应用了条件格式。只要颜色是“标准的”,下面的代码似乎就可以工作。

Sub Button1_Click()
    For i = 1 To 12
        Worksheets("Sheet1").Cells(i, 2) = Worksheets("Sheet1").Cells(i, 1).DisplayFormat.Interior.ColorIndex
    Next
End Sub

【讨论】:

  • 实际上,这似乎可行。我会更详细地尝试一下。谢谢。
【解决方案2】:

这是一个例程,它将 displayformat.interior.color 代码放在正在测试的列旁边的“帮助列”中。我还添加了一个列来显示 RGB 值,但只是为了感兴趣。哦,颜色都是条件格式生成的。

Option Explicit
Sub GetColor()
    Dim R As Range, C As Range
Set R = Range(Cells(2, 1), Cells(10, 1))
For Each C In R
    C.Offset(0, 1).Value = C.DisplayFormat.Interior.Color
    C.Offset(0, 2).Value = converttorgb(C.Offset(0, 1).Value)
Next C
End Sub

Function ConvertToRGB(lColor As Long) As String
    Dim H As String
    Dim Red As Integer, Green As Integer, Blue As Integer
    H = Format(Hex(lColor), "@@@@@@")
Red = Val("&H" & Right(H, 2))
Green = Val("&H" & Mid(H, 3, 2))
Blue = Val("&H" & Left(H, 2))

ConvertToRGB = Format(Red, "0\, ") & Format(Green, "0\, ") & Format(Blue, "0")

End Function

根据您将此信息传输到 Word 的方式,您甚至可能不需要将其放在工作表上。

【讨论】:

  • 你能告诉我在工作表上不需要它的方法吗?我能想到的每件事都涉及一次复制几个单元格,这可能真的很慢。
  • 我必须做出太多假设才能提供建议。我建议,如果您在此线程中的问题得到回答,请将其中一个回答标记为答案。然后在此处或Code Review 中针对您的其他问题创建一个新问题。请按照How to Ask a Good QuestionHow to create a Minimal, Complete, and Verifiable example 的帮助指南进行发布
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-07-23
  • 1970-01-01
  • 2015-09-14
  • 1970-01-01
相关资源
最近更新 更多