VBA代码返回#值错误

VBA代码返回#值错误,vba,excel,Vba,Excel,我试图在excel中显示条件格式中的颜色。 例如,在excel中,我只使用=checkcolor(B5),当我点击return时,它就工作了。但是,当我要求工作表计算时,函数给出了#值!我不知道我哪里出错了。非常感谢您的帮助,因为我是VBA的初学者。谢谢 Function CheckColour(range) If range.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then CheckColour =

我试图在excel中显示条件格式中的颜色。 例如,在excel中,我只使用=checkcolor(B5),当我点击return时,它就工作了。但是,当我要求工作表计算时,函数给出了#值!我不知道我哪里出错了。非常感谢您的帮助,因为我是VBA的初学者。谢谢

    Function CheckColour(range)
        If range.DisplayFormat.Interior.Color = RGB(255, 0, 0) Then
        CheckColour = "Red"
        ElseIf range.DisplayFormat.Interior.Color = RGB(0, 130, 59) Then
        CheckColour = "Green"
        Else
        CheckColour = "Amber"
        End If
    End Function
是的,因为:

请注意,DisplayFormat属性在用户定义的函数中不起作用。例如,在返回单元格内部颜色的工作表函数中,使用类似于以下内容的行:Range(n).DisplayFormat.interior.ColorIndex。当工作表函数执行时,它返回一个#值!错误

而是使用:

range.Interior.Color 
这个(简化的例子)似乎对我有用:

Public Function CheckColour(src As Range)
    Application.Volatile
    CheckColour = src.Parent.Evaluate("GetColor(" & src.Address(False, False) & ")")
End Function

Public Function GetColor(src As Range)
    GetColor = src.DisplayFormat.Interior.Color
End Function

不相关,但如果您的签名是
公共函数checkcolor(ByVal target作为Range)作为字符串
,那么您的签名将更加明确-现在它是隐式公共的,
Range
是隐式的
ByRef
Variant
,函数隐式返回一个
变量
。感谢您的帮助MatThanks Alex,那么有没有办法将条件格式颜色显示为单词,比如说红色、绿色等?