Excel用户定义function:更改单元格的颜色

我在Excel中有一个用户定义的函数。 它被称为电子表格单元格中的公式函数,并且正常工作。

我希望函数能够改变单元格的颜色取决于它返回的值。 基本上,改变单元格的颜色是函数的一个副作用。

我试过了

Application.ThisCell.Interior.ColorIndex = 2 

但是失败了。

这是不能做到的。 用户定义的函数不能改变工作簿/工作表的状态等

使用条件格式来实现你正在尝试的。

编辑:这是更多的build议,而不是一个真正的答案。

下面是VBA UDF如何改变工作表内容的颜色,而不是使用条件格式的演示。

只要这两张纸都按照相同的顺序排列了行和列,那么这将比较两张独立的Excel工作表之间的每个单元格的差异。

您可以将其添加到第三张纸上所需的任意多个单元格中,以检测两张纸上同一两个单元格之间的差异,其中包含以下数据: =DifferenceTest(Sheet1!A1,Sheet2!A1)

而要存储在VBA编辑器中的函数如下所示:

 Function DifferenceTest(str1 As String, str2 As String) As String If str1 = str2 Then Application.Caller.Font.ColorIndex = 2 Else Application.Caller.Font.ColorIndex = 3 DifferenceTest = str1 & " vs " & str2 End If End Function 

不,你不能用函数()来改变单元格的颜色。 但是,您可以在Sub()例程中修改它。

简单地写一个Sub(),它会在你希望运行的单元格上运行你的函数,然后在每个单元运行后,放入一个If语句,看看你是否想根据它返回的值来给它着色。

您可以创build一个vba代码,在您的工作表发生变化后自动运行。 而不是在单独的模块中提供代码,您必须将其embedded到工作表本身中。

右键单击工作表选项卡,select查看代码,然后创build以下代码:

 Private Sub Worksheet_Change(ByVal Target As Range) For Each cell In Range("A1:B8") 'change cell range as needed Select Case cell.Value Case 8 cell.Interior.ColorIndex = 4 'cell color becomes green when cell value is 8 Case "" cell.Interior.ColorIndex = 1 'cell color becomes black when cell is empty Case Is < 6 cell.Interior.ColorIndex = 7 'cell color becomes pink when cell value is smaller than 6 Case Else cell.Interior.ColorIndex = 0 'all other cells get no color End Select Next cell End Sub 
 Function HexToLongRGB(sHexVal As String) As Long Dim lRed As Long Dim lGreen As Long Dim lBlue As Long lRed = CLng("&H" & Left$(sHexVal, 2)) lGreen = CLng("&H" & Mid$(sHexVal, 3, 2)) lBlue = CLng("&H" & Right$(sHexVal, 2)) HexToLongRGB = RGB(lRed, lGreen, lBlue) End Function Function setBgColor(ByVal stringHex As String) Evaluate "setColor(" & Application.Caller.Offset(0, 0).Address(False, False) & ",""" & stringHex & """)" setBgColor = "" End Function 

 Sub setColor(vCell As Range, vHex As String) vCell.Interior.Color = HexToLongRGB(vHex) End Sub