防止屏幕闪烁(特定情况)

时间:2017-06-02 09:45:35

标签: vba excel-vba excel

我正在编写一个宏来在点击图片(ActiveX)时添加一个形状:

Private Sub clickpic_MouseDown(ByVal Button As Integer, ByVal Shift As Integer, ByVal x As Single, ByVal y As Single)

ClickShape CLng(x), CLng(y)

End Sub
Public addedShapes() As Shape
Public sIndex As Integer

Sub ClickShape(x As Long, y As Long)

Dim shp As Shape

Application.ScreenUpdating = False

Set shp = ActiveSheet.Shapes.AddShape(msoShapeMathMultiply, x + ActiveSheet.Shapes("clickpic").Left - 10, _
y + ActiveSheet.Shapes("clickpic").Top - 10, 20, 20)

With shp.Fill

    .ForeColor.RGB = RGB(255, 0, 0)
    .backColor.RGB = RGB(255, 0, 0)

End With

shp.Line.Visible = False

shp.Name = CStr(shp.Top & shp.Left)

ReDim Preserve addedShapes(sIndex)
sIndex = sIndex + 1

Set addedShapes(UBound(addedShapes)) = shp

ActiveSheet.Shapes("clickpic").Visible = False
ActiveSheet.Shapes("clickpic").Visible = True

Application.ScreenUpdating = True

End Sub

我发现the only way to display the shape immediately是启用和禁用图片:

ActiveSheet.Shapes("clickpic").Visible = False
ActiveSheet.Shapes("clickpic").Visible = True

然而,尽管关闭屏幕更新仍然会导致屏幕刷新/闪烁。知道如何防止这种情况吗?

1 个答案:

答案 0 :(得分:0)

读取Visible = True / False的某处可能会触发重新计算工作表,这可能会导致闪烁。在代码中尝试将计算设置为手动是值得的。