运行宏时Excel闪烁

时间:2018-02-12 19:37:29

标签: vba excel-vba excel

当运行下面的宏时,我的整个电子表格会闪烁,如果有人告诉我如何能让它发生,我将不胜感激。

宏正在检查列D是否显示为灰色,是否显示为彩色并使列F显示为灰色,反之亦然。

它通过使用C列中正确的颜色复制我设置的3个单元格的格式来更改颜色。

Worksheets("SHELLY").Range("D4:F19").ClearContents

If Worksheets("SHELLY").Range("D3:D19").Interior.ColorIndex = 15 Then

    Range("C41").Select
    Selection.Copy
    Range("F3:F19").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("C42").Select
    Selection.Copy
    Range("D3:D19").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
Else

    Range("C41").Select
    Selection.Copy
    Range("D3:D19").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
    Range("C43").Select
    Selection.Copy
    Range("F3:F19").Select
    Selection.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
        SkipBlanks:=False, Transpose:=False
End If

2 个答案:

答案 0 :(得分:5)

尝试推杆:

代码前的

Application.ScreenUpdating = False和最后的Application.ScreenUpdating = True

切换此属性告诉Excel不要重绘/更新屏幕,据我所知。

它可能会提高代码的速度。此外,最好避免使用激活/选择,但这不是你的问题。

答案 1 :(得分:2)

正如Scott所说,你必须避免使用Select / Selection / Activate / ActiveXXX模式并使用完全限定的显式范围引用

此外,您可以重构代码并避免代码重复,如下所示:

Dim sourceCell1 As Range, targetRng1 As Range, sourceCell2 As Range, targetRng2 As Range
With Worksheets("SHELLY")
    If .Range("D3:D19").Interior.ColorIndex = 15 Then
        Set sourceCell1 = .Range("C41")
        Set targetRng1 = .Range("F3:F19")
        Set sourceCell2 = .Range("C42")
        Set targetRng2 = .Range("D3:D19")
    Else
        Set sourceCell1 = .Range("C41")
        Set targetRng1 = .Range("D3:F19")
        Set sourceCell2 = .Range("C43")
        Set targetRng2 = .Range("F3:F19")
    End If
End With

sourceCell1.Copy
targetRng1.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

sourceCell2.Copy
targetRng2.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
    SkipBlanks:=False, Transpose:=False

如果您想完全消除任何屏幕“活动”,那么您可以将上述代码包含在:

Application.ScreenUpdating = False
....(code above)
Application.ScreenUpdating = True