Vba 用户停止滚动时启动的宏(刷新屏幕以防止与形状相关的视觉错误)
错误背后是什么 我有一本工作簿,其中几张纸有很多形状(包括箭头)。在工作表中滚动时,形状不会刷新。箭头变为不可见,形状轮廓变为虚线。形状仍然在那里-有时箭头只是部分看不见。在网上搜索后,我发现当一张纸有很多形状时,这是一个已知的错误。这与我的监视器刷新无关-我有两个监视器,将excel从一个监视器移到另一个监视器不会刷新。有几种方法可以做到这一点,不过-1)选择形状后面的单元格2)最小化和最大化excel 3)选择形状本身(有时有效) 我的解决方法和问题 我制作了一个宏来刷新形状。基本上,它会选择所有单元格,并在一瞬间返回到活动单元格的状态。我现在必须在VBE中启动宏或使用按钮启动宏,但它工作正常:Vba 用户停止滚动时启动的宏(刷新屏幕以防止与形状相关的视觉错误),vba,excel,Vba,Excel,错误背后是什么 我有一本工作簿,其中几张纸有很多形状(包括箭头)。在工作表中滚动时,形状不会刷新。箭头变为不可见,形状轮廓变为虚线。形状仍然在那里-有时箭头只是部分看不见。在网上搜索后,我发现当一张纸有很多形状时,这是一个已知的错误。这与我的监视器刷新无关-我有两个监视器,将excel从一个监视器移到另一个监视器不会刷新。有几种方法可以做到这一点,不过-1)选择形状后面的单元格2)最小化和最大化excel 3)选择形状本身(有时有效) 我的解决方法和问题 我制作了一个宏来刷新形状。基本上,它会选
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,最后一条注释可能会起作用。谢谢我稍后会验证它,但我不明白为什么它不起作用。