检测单元格的条件颜色

时间:2017-04-20 21:38:00

标签: excel excel-vba vba

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

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

不幸的是,Selection.Interior.Color只检测单元格的自然底层颜色,而不是条件格式的颜色。

有没有办法检测条件格式分配的颜色?

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

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

谢谢大家。

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

这是一个例程,它将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

enter image description here

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