Excel 闪烁动画被DoEvents中断

Excel 闪烁动画被DoEvents中断,excel,vba,dispose,repaint,doevents,Excel,Vba,Dispose,Repaint,Doevents,我用Excel VBA编写了一些简单的代码,使一个区域“闪烁”成一种颜色——这是通过在所讨论的区域上仔细地绘制一个矩形对象,并改变其透明度使长方体逐渐褪色来实现的 以下是代码(在工作表_Change事件的工作表1中): 我使用带有块的来包含没有父变量的临时对象(我认为它非常整洁,希望保持这种方式)。该问题源于DoEvents调用(强制为动画重新绘制屏幕所必需的) 动画是从某些工作表更改事件调用的,如果调用了子对象的第二个实例(或者实际上,如果似乎发生了任何事件),则第一个实例将半完成终止,并且永

我用Excel VBA编写了一些简单的代码,使一个区域“闪烁”成一种颜色——这是通过在所讨论的区域上仔细地绘制一个矩形对象,并改变其透明度使长方体逐渐褪色来实现的

以下是代码(在
工作表_Change
事件的
工作表1
中):

我使用带有块的
来包含没有父变量的临时对象(我认为它非常整洁,希望保持这种方式)。该问题源于
DoEvents
调用(强制为动画重新绘制屏幕所必需的)

动画是从某些工作表更改事件调用的,如果调用了子对象的第二个实例(或者实际上,如果似乎发生了任何事件),则第一个实例将半完成终止,并且永远不会完成-这意味着永远不会删除临时形状

下面是一个说明我所说内容的插图:


我该如何解决这个问题呢?

这与其说是一个解决方案,不如说是一种锻炼,但从技术上讲,它能完成任务

如果在
flashbox
过程的运行期间禁用userinput,它将等待动画变为芬兰语,然后才重新启用它,则可以避免动画处于冻结状态

Private Sub Worksheet_Change(ByVal Target As Range)
    Application.Interactive = False
    flashBox Target, ColorConstants.vbMagenta
    Application.Interactive = True
End Sub


我会看看是否能“正确”解决这个问题,但现在这是一个很好的解决办法:)

@QHarr当然,有一个调用方代码,它是一个
工作表\u Change
事件。
DoEvents
位于i的
中。。下一步
animationopsy的循环!我的天不好,看不见!这不是一个解决方案,但您需要记住,VBA在单个线程上运行,这意味着该线程可以做一件事,也可以做另一件事。如果您希望框在调用其他事件(运行宏、更新屏幕等)时保持闪烁(这是主线程使之成为可能的),那么我认为您将遇到困难。有趣的问题!老兄,就是这样的时刻,你希望vba支持多个-threading@Rawrplus ;) 虽然实际上在这种情况下,我认为可能有一个解决办法
Private Sub Worksheet_Change(ByVal Target As Range)
    Application.Interactive = False
    flashBox Target, ColorConstants.vbMagenta
    Application.Interactive = True
End Sub