从工作表函数传递范围时获取单元格内部颜色失败

文斯·W。

我正在尝试编写一个可以从一个单元格调用的简单函数,如果给定单元格的背景具有特定的背景颜色,则该函数将返回。

从子例程调用时,此函数按预期工作,但从工作表调用时,此函数失败。在生产线上

IntColor = Cell.DisplayFormat.Interior.Color

这是所有代码

Option Explicit

Public Function GetCellRGB(Rng As Range) As Integer()
    Dim Result(1 To 3) As Integer
    Dim Cell As Range
    Set Cell = Rng.Cells(1, 1)

    Dim IntColor As Integer

    ' when called from worksheet, function exits here with a #VALUE error
    IntColor = Cell.DisplayFormat.Interior.Color

    Result(1) = IntColor Mod 256 ' red
    Result(2) = IntColor \ 256 Mod 256 ' green
    Result(3) = IntColor \ 65536 Mod 256 ' blue

    GetCellRGB = Result
End Function

Public Function IsColor(Rng As Range, R As Integer, G As Integer, B As Integer) As Boolean
    Dim Vals() As Integer

    Vals = GetCellRGB(Rng)
    If R = Vals(1) And G = Vals(2) And B = Vals(3) Then
        IsColor = True
    Else
        IsColor = False
    End If
End Function

' This works as expected
Sub ColorTest()
    Dim Rng As Range
    Set Rng = ThisWorkbook.ActiveSheet.Range("A1")
    Debug.Print IsColor(Rng, 255, 0, 0)
End Sub

在此处输入图片说明

蒂姆·威廉姆斯

这是“无法在UDF中使用DisplayFormat”问题的解决方法。

它用于Evaluate回避UDF上下文

Public Function DFColor(addr)
    DFColor = Range(addr).DisplayFormat.Interior.Color
End Function

Function CFColorMatches(rng As Range, R As Long, G As Long, B As Long)
    CFColorMatches = (rng.Parent.Evaluate("DFColor(""" & rng.Address & """)") = RGB(R, G, B))
End Function

还要注意,您真的不需要所有与RGB相关的代码

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Excel:从工作表中调用vba函数时,将当前单元格作为参数传递

VBA排序单元格颜色变化的范围和工作表

INDIRECT函数引用其他工作表的单元格范围

获取工作表的范围,直到包含数据的最后一个单元格

如何从单个单元格行和列位置的列表中获取工作表范围?

从按钮内部获取面板并更改 TableLayoutPanel 单元格颜色

更改工作表中随机单元格的颜色

范围对象包含工作表的所有单元格

从范围获取单元格

打开工作簿时更改单元格颜色

在函数中使用单元格的值从其他工作表中获取数据-Google工作表

Excel VBA 2016根据计算将范围单元格传递到另一张工作表

如何从Excel工作表中的单元格获取数值

公式 - 使用单元格值获取工作表名称

在登录时根据单元格值隐藏工作表

VBA检查单元格内部颜色

使用 GAS 将数据导入另一个工作表时如何保留单元格背景颜色?

引用工作簿以根据工作簿中的单元格范围添加新工作表

根据Excel工作表中的单元格颜色和文本颜色设置数据框子集

工作表,单元格和范围的默认范围是什么?

将特定单元格从范围复制到新的工作表范围

Excel公式获取单元格颜色

从.xlsx获取单元格颜色

如果单元格的值与不同工作表中单元格的值匹配,如何为单元格分配颜色?

设置单元格颜色时出错

在Excel工作表中搜索文本并将单元格范围提取到表中

根据颜色常量的单元格值更改内部颜色

函数的传递范围,相邻单元格的总和和返回总和

如何将不连续的单元格范围从Excel传递到ExcelDNA函数