用户自定义function改变单元格的颜色

我看到很多用户试图用用户定义的函数来改变单元格的颜色。 我总是觉得这是不可能的。 我的理解是,除了包含公式的单元格的值之外,用户定义的函数不能更改单元格的任何属性。 Subs是什么改变了细胞本身。

然而,当玩弄一些代码来testing这个,我发现情况并非总是如此。
使用简单的代码:

Function ColorCell(rng As Range) If rng.Value = 1 Then ColorCell = False Else ColorCell = True rng.Interior.ColorIndex = 3 End If End Function 

如果我把这个functioninput到一个单元格中,我可以达到预期的效果,没有单元格会改变颜色 但是,如果我使用公式>插入functionbutton并导航到我的公式以这种方式插入它,它着色目标单元格。
细胞颜色功能

这是怎么可能的,为什么函数以不同的方式input时会有不同的performance呢?

编辑:这是使用Excel 2007testing

使用这个代码…只是replace表名并尝试

 Sheets("sheet_name").range(j:j).clear for j=2 to 15 if Sheets("sheet_name").Cells(j, 1).value=1 then else Sheets("sheet_name").Cells(j, 1).Interior.ColorIndex = 3 next j 

我使用Worksheet_Change事件来检测工作范围内的值更改。 示例:我想在区域A1:A5被更改时执行某些操作。 我使用下面的事件。

 Sub Worksheet_Change(ByVal Target As Range) If Not Intersect(Target, Range(<Your working range>)) Is Nothing Then 'Define range that you want to do 'Statement here ... End If End Sub 

当范围值已经改变时。 它会执行你的代码。

和其他方式。 使用条件格式。

大家早晚都会发现,在用户函数中,您不能直接访问在电子表格中改变内容的子文件。

但是试试这个:

 Dim ColorMeTarget As Range, ColorMeVal As Long Public Function ColorMe(ByVal TargetRange As Range, ByVal ColVal As Long) Set ColorMeTarget = TargetRange ColorMeVal = ColVal ColorMe = ColVal End Function Public Sub ColorMeSub() Application.OnTime Now + TimeValue("00:00:05"), "ColorMeSub" If ColorMeTarget.Interior.Color <> ColorMeVal Then ColorMeTarget.Interior.Color = ColorMeVal End Sub 

如果你先运行这个子程序,它会不断地扫描静态variablesColorMeTarget和ColorMeVal来查看是否有变化。 ColorMe函数将设置这些值。 如果ColorMeTarget尚未初始化,则需要额外的代码。

如果你变得更聪明,你可以首先检查函数是否确实有变化,并将新的着色请求添加到堆栈。 您的重复的子可以'赶上',特别是如果你有这样的许多function。

您甚至可以将各种附加控件添加到您的函数/macros – 即使是最新版本的“有条件的伪造”也不包括! 好极了!!!!

有些东西要尝试:在我的一些自动化macros中,我可以通过函数设置OnTime,但是无法在此处使用它。 将函数设置为OnTime并且没有需要初始化的重新分配子将会更清洁。

也可以尝试基于单元格条件(又名条件格式)自动对单元格进行自动着色的非脚本方法:

突出显示所需范围,然后单击工具栏上的条件格式

使用既定的规则或制定新的规则

注意规则类型的选项;我选择了一个简单的格式化基于单元格内容的范围。您也可以根据公式进行格式化。设置条件测试...在这种情况下,我说的条件是当一个单元格值大于5.然后单击格式,并设置所需的格式,无论是字体更改或单元格的阴影等在这里,我选择了在5以上的时候使细胞变成绿色结果如下。您可以删除单元格的内容,而不删除为单元格设置的条件格式。