Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/google-app-engine/4.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
Vba 用户停止滚动时启动的宏(刷新屏幕以防止与形状相关的视觉错误)_Vba_Excel - Fatal编程技术网

Vba 用户停止滚动时启动的宏(刷新屏幕以防止与形状相关的视觉错误)

Vba 用户停止滚动时启动的宏(刷新屏幕以防止与形状相关的视觉错误),vba,excel,Vba,Excel,错误背后是什么 我有一本工作簿,其中几张纸有很多形状(包括箭头)。在工作表中滚动时,形状不会刷新。箭头变为不可见,形状轮廓变为虚线。形状仍然在那里-有时箭头只是部分看不见。在网上搜索后,我发现当一张纸有很多形状时,这是一个已知的错误。这与我的监视器刷新无关-我有两个监视器,将excel从一个监视器移到另一个监视器不会刷新。有几种方法可以做到这一点,不过-1)选择形状后面的单元格2)最小化和最大化excel 3)选择形状本身(有时有效) 我的解决方法和问题 我制作了一个宏来刷新形状。基本上,它会选

错误背后是什么 我有一本工作簿,其中几张纸有很多形状(包括箭头)。在工作表中滚动时,形状不会刷新。箭头变为不可见,形状轮廓变为虚线。形状仍然在那里-有时箭头只是部分看不见。在网上搜索后,我发现当一张纸有很多形状时,这是一个已知的错误。这与我的监视器刷新无关-我有两个监视器,将excel从一个监视器移到另一个监视器不会刷新。有几种方法可以做到这一点,不过-1)选择形状后面的单元格2)最小化和最大化excel 3)选择形状本身(有时有效)

我的解决方法和问题 我制作了一个宏来刷新形状。基本上,它会选择所有单元格,并在一瞬间返回到活动单元格的状态。我现在必须在VBE中启动宏或使用按钮启动宏,但它工作正常:

Sub refreshShapes()
    Application.ScreenUpdating = False
    Dim active As Range
    Set active = ActiveCell

    Cells.Select
    active.Select
    Application.ScreenUpdating = True
End Sub

现在我想让这个宏在用户每次滚动工作表时启动并停止滚动,因为错误只会在那时发生。有没有一种不用定时器的方法?是否有其他已知方法可以防止此错误/以更好的方式处理它?

如果不想使用
计时器
,请尝试将工作表刷新宏包含在可用的
工作表事件之一中。请参阅完整列表。我可能会选择
SelectionChange
事件

您可能还想分析如何捕获滚动事件


顺便说一句,看起来一个简单的
DoEvents
将取代
应用程序的
屏幕更新
属性

,我宁愿将
屏幕更新
改为
,以防止用户看到整个
工作表
被选中。这回答了你的问题吗?另外,由于我的宏包含选择的更改,将其放入
SelectionChange
事件导致Excel在我尝试它时崩溃-它只是一次又一次地循环自身。我不认为
单元格。选择
并激活
。如果在
屏幕更新=True
之后执行
事件,则选择
是必要的。否则,只需在调用
单元格之前,在
选择更改
中设置一个全局变量。选择
并在
选择更改
中检查变量是否已设置。如果是这样,则阻止代码执行。在原始
SelectionChange
的末尾,取消设置全局变量Yes,最后一条注释可能会起作用。谢谢我稍后会验证它,但我不明白为什么它不起作用。