如何捕获包含公式的单元格的更改事件

时间:2012-10-05 12:00:30

标签: c# excel vsto

我目前正在处理Excel 2007插件,需要从工作表中监控一系列单元格。 我设法为工作表实现Change事件,如果更改发生在我感兴趣的单元格范围内,我正在做一些业务逻辑。 我的问题是,在细胞范围内,我有一些细胞使用来自“兴趣范围”之外的其他细胞的公式得到它们的值。 如果包含公式的其中一个单元格发生更改,则不会触发Change事件。

即使对于包含公式的单元格,如何捕获更改事件?

提前多多感谢! 安德烈

2 个答案:

答案 0 :(得分:1)

这可能会有所帮助:

Function GetPrecedents(rInput As Range) As Range
' Returns combined range of all precedents of the input range.
Dim rCell As Range, rPrec As Range, rOutput As Range

    On Error Resume Next
    For Each rCell In rInput
        For Each rPrec In rCell.DirectPrecedents
            If Not rPrec Is Nothing Then
                If rOutput Is Nothing Then
                    Set rOutput = rPrec
                Else
                    Set rOutput = Union(rOutput, rPrec)
                End If
            End If
        Next
    Next
    Set GetPrecedents = rOutput

End Function

现在当然,如果你真的想变得聪明,你需要让这个递归来考虑先例的先例的先例......但我没有时间。

答案 1 :(得分:0)

尝试使用Worksheet_Calculate()事件。

只要重新计算工作表,就会触发它,因此它会捕获工作表中任何单元格的公式引发的更改。