当运行下面的宏时,我的整个电子表格会闪烁,如果有人告诉我如何能让它发生,我将不胜感激。
宏正在检查列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
答案 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