用户自定义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并且没有需要初始化的重新分配子将会更清洁。
也可以尝试基于单元格条件(又名条件格式)自动对单元格进行自动着色的非脚本方法: