保存数据后Excel宏事件不起作用



我的宏函数是:

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个条目编写代码后使用它。但只要我把数据保存在一个已经保存的宏文件上。我的事件激活不起作用,更改单元格颜色时也不会发生任何事情。

请提供解决方案。

  1. 不能在Range As Range中声明变量名Range。这非常令人困惑,可能会把代码搞砸。永远不要将保留字用作变量名。VBA中的所有名称最多只能是唯一的。

  2. 如果像公式一样将其用作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)一样使用它,并且它不易失,则公式仅在A1B1发生变化时重新计算。但如果只是它们的颜色发生了变化,即使在ActiveSheet.Calculate上也不会重新计算。

请注意,使函数不稳定意味着每当Excel需要计算某些内容时都会计算它。因此,使用volatile函数越多,工作表的速度就会越慢。

最新更新