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