我的宏函数是:
Function IsColouredCell(Range As Range, Colour As Range) As Boolean
If Range.Interior.Color = Colour.Interior.Color Then IsColouredCell = True
End Function
事件代码为:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
ActiveSheet.Calculate
End Sub
用例:检查目标的颜色匹配&参考单元格。
上面的代码一直处于活动状态,直到我在vba中为excel中的n个条目编写代码后使用它。但只要我把数据保存在一个已经保存的宏文件上。我的事件激活不起作用,更改单元格颜色时也不会发生任何事情。
请提供解决方案。
-
不能在
Range As Range
中声明变量名Range
。这非常令人困惑,可能会把代码搞砸。永远不要将保留字用作变量名。VBA中的所有名称最多只能是唯一的。 -
如果像公式一样将其用作UDF(用户定义函数(,您可能需要使其不稳定,因为它只在任何依赖值发生变化时在
ActiveSheet.Calculate
上重新计算,而不在单元格颜色发生变化时重新计算:
所以它应该看起来像下面这样:
Function IsColouredCell(ByVal MyRange As Range, ByVal Colour As Range) As Boolean
Application.Volatile
If MyRange.Interior.Color = Colour.Interior.Color Then IsColouredCell = True
End Function
如果像=IsColouredCell(A1,B1)
一样使用它,并且它不易失,则公式仅在A1
或B1
的值发生变化时重新计算。但如果只是它们的颜色发生了变化,即使在ActiveSheet.Calculate
上也不会重新计算。
请注意,使函数不稳定意味着每当Excel需要计算某些内容时都会计算它。因此,使用volatile函数越多,工作表的速度就会越慢。