Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/26.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
Excel 2003-拖动图表点时如何触发事件?_Excel_Vba_Events_Worksheet Function_Excel 2003 - Fatal编程技术网

Excel 2003-拖动图表点时如何触发事件?

Excel 2003-拖动图表点时如何触发事件?,excel,vba,events,worksheet-function,excel-2003,Excel,Vba,Events,Worksheet Function,Excel 2003,我有一个图表,它是三次样条函数生成器输出的XY图。样条曲线的输入是一系列点(X,Y),这些点也显示在图形上。样条曲线输出的计算由VBA工作表\u更改事件触发。其思想是曲线生成是交互式的——用户输入一个X-Y对,样条曲线输出图形会相应地改变 问题是,当我用鼠标单击并拖动一个点来更改点坐标时,单元格中的相应值会更改,但不会触发事件。如果手动更改该值,则会按预期触发事件 在图表上拖放点时,是否有生成事件的方法 **更新** 我添加了一点错误处理,以确保在重新计算引发异常时再次设置EnableEvent

我有一个图表,它是三次样条函数生成器输出的XY图。样条曲线的输入是一系列点
(X,Y)
,这些点也显示在图形上。样条曲线输出的计算由VBA
工作表\u更改
事件触发。其思想是曲线生成是交互式的——用户输入一个X-Y对,样条曲线输出图形会相应地改变

问题是,当我用鼠标单击并拖动一个点来更改点坐标时,单元格中的相应值会更改,但不会触发事件。如果手动更改该值,则会按预期触发事件

在图表上拖放点时,是否有生成事件的方法

**更新**

我添加了一点错误处理,以确保在重新计算引发异常时再次设置
EnableEvents
标志:

private Sub Worksheet_Calculate()

Application.EnableEvents     = False   ' make sure there are no recursive calls
On Error GoTo Finalize                 ' make sure events are re-enabled if we crash in here

RecalculateOutputPoints
Finalize:
    Application.EnableEvents = True
End Sub
使用事件和属性:

Private Sub Worksheet_Calculate()

    Application.EnableEvents     = False   ' make sure there are no recursive calls
    On Error GoTo Finalize                 ' make sure events are re-enabled if we crash in here
    Call RecalculateOutputPoints()

  Finalize:
    Application.EnableEvents = True

End Sub

更新: 我得到纠正:您的错误处理很好。我假设错误处理不适用于“儿童潜艇”,但快速测试证明我不正确:

Sub RunThisSub()
    On Error GoTo gotError
    Call causeError
    Err.Raise 28 'cause "Stack" error
gotError:
    MsgBox "This is after the error"
End Sub

Sub causeError()
    Err.Raise 6 'cause "Overflow" error
End Sub

在测试中,未显示“堆栈”或“溢出”错误。

检查工作表\u计算事件是否已触发。简短回答-是<代码>工作表\u计算在拖放点时激发。如果我在这里不小心的话,我想可能会有无休止的递归。这个过程没有任何可以用来找出触发重新计算的单元格的参数。此事件是否在每个单元格更新后(之前)触发一次?请参阅。请注意,自Excel2007以来,无法在图表上拖放点。要解决递归问题,请参阅。我从未见过从产品中删除内容的意义。我看不出拖放会有安全问题。事实证明,自从Excel 2003(不是2007年)以来,拖放数据点功能就不可用了,但是@Excelosaurus&Rossmcm,有一种方法可以将该功能添加回新版本。谢谢,我添加了一点错误处理(请参阅问题编辑)好主意除了如果错误发生在
重新计算输出点()
中,它不会被
工作表\u Calculate()
中的错误处理捕获,但这很容易修复。(我编辑了上面的例子)嗯,好的。不熟悉VBA错误处理。你是说例程中未处理的异常不会出现在调用方面前吗?没关系,我纠正了,你是对的。实际上,我一直认为调用sub的错误处理不适用于“child sub”,但我刚刚测试了它,您是对的,您的代码很好。所以我们都学到了一些东西,完美!对于您的代码,如果出现错误,
Sub重新计算输出点()
将停止执行并返回到调用的Sub,然后
Application.EnableEvents=True
仍将重新启用事件。:-)
Sub RunThisSub()
    On Error GoTo gotError
    Call causeError
    Err.Raise 28 'cause "Stack" error
gotError:
    MsgBox "This is after the error"
End Sub

Sub causeError()
    Err.Raise 6 'cause "Overflow" error
End Sub