簡體   English   中英

運行宏時Excel閃爍

[英]Excel Flashes When Running Macro

運行以下宏時,整個電子表格都會閃爍,如果有人告訴我如何避免這種情況發生,我將不勝感激。

宏正在檢查D列是否變灰,是否使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

嘗試放入:

在代碼之前, Application.ScreenUpdating = FalseApplication.ScreenUpdating = True

據我所知,切換此屬性會告訴Excel不要重繪/更新屏幕。

這可能會提高您的代碼速度。 另外,最好避免使用激活/選擇,但這不是您的問題。

正如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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM