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

时间:2017-07-14 19:40:40

标签: excel vba excel-vba 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.colorindex
 BBcolor=BB.font.colorindex
 IF BBcolor=3 Or AAcolor=3 Then
  Application.caller.font.colorIndex=3
 End If 

代码的其余部分只是从输入的范围计算双精度的公式,它以double形式返回。

为了澄清,我试图确定引用的输入单元格的文本颜色。如果我可以从UDF调用sub,我不限于UDF。

1 个答案:

答案 0 :(得分:0)

概念证明......

尝试这个...使用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