Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/280.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何捕获包含公式的单元格的更改事件_C#_Excel_Vsto - Fatal编程技术网

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

C# 如何捕获包含公式的单元格的更改事件,c#,excel,vsto,C#,Excel,Vsto,我目前正在开发一个Excel2007插件,需要监控工作表中的一系列单元格。 我设法实现了工作表的更改事件,如果更改发生在我感兴趣的单元格范围内,我将执行一些业务逻辑。 我的问题是,在单元格范围内,我有几个单元格使用公式从我的“兴趣范围”之外的其他单元格获取它们的值。 如果包含公式的某个单元格发生更改,则不会触发更改事件 如何捕捉包含公式的单元格的更改事件 提前多谢! Andrei尝试使用工作表\u Calculate()事件 无论何时重新计算工作表,它都会被触发,因此它将捕获工作表中任何单元格由

我目前正在开发一个Excel2007插件,需要监控工作表中的一系列单元格。 我设法实现了工作表的更改事件,如果更改发生在我感兴趣的单元格范围内,我将执行一些业务逻辑。 我的问题是,在单元格范围内,我有几个单元格使用公式从我的“兴趣范围”之外的其他单元格获取它们的值。 如果包含公式的某个单元格发生更改,则不会触发更改事件

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

提前多谢!
Andrei

尝试使用
工作表\u Calculate()
事件

无论何时重新计算工作表,它都会被触发,因此它将捕获工作表中任何单元格由公式引起的更改。

这可能有助于:

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

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

我没有看到工作表的计算事件。我正在使用VSTO(不是我读到的有关此事件的VBA加载项),我只能看到工作表的计算方法。。。我是不是错过了什么,却没有意识到?非常感谢。好啊最终使用类似于
((Excel.DocEvents\u Event)工作表)的东西找到它。Calculate+=new Excel.DocEvents\u calculateeEventHandler(ThisAddIn\u Calculate)应用程序.Caller
对象将向您提供该信息-至少在VBA下是这样。哦,别提了,你还需要维尼的先例信息;)这看起来很有趣。。。我会试试看它如何处理我的工作。谢谢在将代码翻译成C#并理解在尝试访问DirectPrevents时实际上需要一个try/catch块之后,显然没有办法检查是否有任何代码可以实现我想要的行为。非常感谢你的帮助!如果可能的话,还有一个问题:如果我添加了一个引用其他工作表的公式,则上述代码不起作用。。。你知道我为什么以及如何解决这个问题吗?非常感谢。我在MSDN文档中注意到DirectPrecements仅适用于当前活动的工作表,无法跟踪远程引用。然而,即使是先例也似乎不起作用……:|