Vba 将单元格中文本的值和颜色传递给用户定义的函数

Vba 将单元格中文本的值和颜色传递给用户定义的函数,vba,excel,excel-udf,Vba,Excel,Excel Udf,目前,我在将单元格的值及其相应的文本颜色传递给用户定义函数时遇到问题。我将引用作为范围传递,并使用.Font.ColorIndex。然后在IF语句中使用它来确定是否有红色(值为3),然后application.caller.fontIndex=3将单元格文本变为红色 Public Function Example(AA As Range, BB As Range) As double Dim AAcolor, BBcolor As Integer AAcolor=AA.font.color

目前,我在将单元格的值及其相应的文本颜色传递给用户定义函数时遇到问题。我将引用作为范围传递,并使用.Font.ColorIndex。然后在IF语句中使用它来确定是否有红色(值为3),然后application.caller.fontIndex=3将单元格文本变为红色

 Public Function Example(AA As Range, BB As Range) As double
 Dim AAcolor, BBcolor As Integer
 AAcolor=AA.font.colorindex
 BBcolor=BB.font.colorindex
 IF BBcolor=3 Or AAcolor=3 Then
  Application.caller.font.colorIndex=3
 End If 
代码的其余部分只是根据输入的范围计算double的公式,该范围作为double返回

为了澄清,我试图确定引用的输入单元格文本的颜色。如果我可以从我的自定义项调用sub,我不限于自定义项来执行此操作

概念证明

试试这个。。。使用F5或F8单步执行“sub abc123”,并观察工作表上的K5(I5只是向UDF提供一个变量)

它来自记录的宏,所以有点复杂

注意:如果您想做更多的事情,请在另一个单元格中使用另一个UDF

Sub abc123()

    ' run on empty worksheet

    Rows("5:5").Delete

    Range("K5").FormulaR1C1 = "56.7"                                         ' just some random data
    Range("K5").FormatConditions.Add Type:=xlExpression, Formula1:="=J5=3"   ' conditional format dependent on value of J5
    Range("K5").FormatConditions(Range("K5").FormatConditions.Count).SetFirstPriority
    Range("K5").FormatConditions(1).Font.Color = -16776961
    Range("K5").FormatConditions(1).Font.TintAndShade = 0
    Range("K5").FormatConditions(1).StopIfTrue = False

    Range("J5").FormulaR1C1 = "=example(RC[-1])" ' UDF returns value to J5
    Stop
    Range("I5").FormulaR1C1 = "2"                ' just some values passed to UDF
    Stop
    Range("I5").FormulaR1C1 = "3"                ' this one should make K5 go red
    Stop
    Range("I5").FormulaR1C1 = "4"

End Sub


Public Function Example(a As Variant) As Variant     ' UDF
    Example = a                                      ' just echo back the value that was received
End Function

UDF只能返回值-无法直接更新工作表。解决方法:。。。假设数据位于单元格C5。。。。在单元格B5“=示例(C5)”中运行一个UDF,该UDF的值为C5,并返回一个3。。。。如果application.caller.font.colorindex=3更改单元格C5的字体颜色,则在C5上执行条件格式以变为红色。是否可以嵌套Sub来确定给定范围内的字体颜色?OP想要做的事情无法在UDF…
应用程序中完成。UDF的调用者返回对调用单元格的引用,因此OP的语法是正确的,但(正如Tim所说)代码无论如何都无法工作。每天学习新的东西。。。LOLF自定义项将文本着色为精细。我不认为使用udf有什么问题。我不是想改变整个细胞的颜色。