Font.ColorIndex在输入和输出之间不一致

时间:2018-10-08 14:55:28

标签: excel vba excel-vba

我具有以下功能,该功能可以解析一些格式表并返回颜色索引:

Function returnFontColor(targetString As String) As Integer

    Dim formatSheet As Worksheet
    Dim lastRow As Long
    Dim row As Long
    Dim counter As Integer

    returnFontColor = 0

    Set formatSheet = ThisWorkbook.Worksheets("Formatting")

    With formatSheet

        lastRow = .Cells(.Rows.Count, 2).End(xlUp).row

        For row = 2 To lastRow
            If LCase(CStr(.Range("B" & row).Value)) = LCase(CStr(targetString)) Then
                For counter = 1 To Len(.Range("C" & row).Value)
                    If .Range("C" & row).Characters(Start:=counter, Length:=1).Font.ColorIndex <> 0 Then

                        returnFontColor = .Range("C" & row).Characters(Start:=counter, Length:=1).Font.ColorIndex
                        GoTo Exiter
                    End If
                Next
            End If
        Next
    End With
Exiter:

End Function

我如何使用该功能:

ws.Cells(row_num, col_num).Font.ColorIndex = returnFontColor(name)

我的问题是,调用此函数得到的颜色与格式表的颜色明显不同,我不明白为什么,因为这应该依赖于非常特定的RGB。有什么我想念的吗?

2 个答案:

答案 0 :(得分:1)

用户Font.Color而不是Font.ColorIndex

`索引返回一个可以包含许多颜色的托盘。

答案 1 :(得分:0)

返回颜色索引与返回颜色不同。颜色索引从调色板返回一个位置,而不是实际的RGB颜色。

通常,从主菜单的颜色下拉列表中选择单元格填充颜色。在这种情况下,尽管颜色索引相同,两个具有不同Office主题的工作簿仍将显示不同的颜色。

要获取实际的填充颜色,请使用Font.Color方法并以 Double 的形式返回,因为可能的值为0到256 ^ 3。