【问题标题】:Eliminating Screen Flickering in VBA Excel when Copying and Pasting Between Workbooks在工作簿之间复制和粘贴时消除 VBA Excel 中的屏幕闪烁
【发布时间】:2018-10-17 07:27:57
【问题描述】:

我制作了一个宏,用于从报表工作簿中复制某些数据并将其粘贴到摘要工作簿中。从功能上讲,宏工作得很好,但是当数据在工作簿之间移动时,我看到了“闪烁”效果。我已经尝试了许多消除它的技巧(参见代码),但它仍然闪烁!关于如何消除它或可能导致它的任何建议?

我引用了this similar question,但它不适用于我的情况。

这里是我的代码的一个稍微简化的版本。我想我已经包含了所有可能与此问题相关的部分,但如果有任何不妥之处,请告诉我。

Sub GetInfo()

'This macro copies and pastes certain information from a 
'report of a fixed format into a summary with a 'nicer' format.

'Variables
Dim xReport As Workbook
Dim xSummary As Workbook
Dim xReportSheet As Worksheet
Dim xSummarySheet As Worksheet
Dim rng As Range

'Initilizations
Set xSummary = Workbooks("Summary")
Set xSummarySheet = xSummary.ActiveSheet
Set xReport = Workbooks.Open(xFilePath)
Set xReportSheet = xReport.ActiveSheet

'Turn Off Window Flickering (but it doesn't work)
Application.ScreenUpdating = False
Application.Calculation = xlCalculationManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Application.DisplayStatusBar = False
Application.DisplayAlerts = False


'Format info in each workbook.
With xSummary
    With xSummarySheet
        'Do some initial formatting to workbook prior to pasting info.
    End With
End With

With xReport
    With xReportSheet
        'Do some formatting on the info before copying.
    End With
End With


'Copy and Paste Data between workbooks.
    'Copy
    With xReport
        With xReportSheet
            Set rng = .Cells(2,5)
            Application.CutCopyMode = False
            rng.Copy
        End With
    End With

    'Paste
    With xSummary
        With xSummarySheet
            Set rng = .Cells(3,1)
            rng.PasteSpecial Paste:=xlpasteValues
        End With
    End With

    'Copy and Paste a few more times
    '...
    '...
    '...

'Return to normal
Application.ScreenUpdating = True
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Application.DisplayStatusBar = True
Application.DisplayAlerts = True

End Sub

谢谢

【问题讨论】:

    标签: excel vba window copy-paste flicker


    【解决方案1】:

    不需要双重嵌套的With 语句。您一次只能使用 1 个 With...End With 语句(嗯,您实际上可以限定使用之前的 with 语句来定义一个新的 With 语句,但在这种情况下您不会这样做)。无论如何,这不是你的问题。

    尝试看看避免复制/粘贴是否能满足您的需求。

    全部替换:

    'Copy and Paste Data between workbooks.
        'Copy
        With xReport
            With xReportSheet
                Set rng = .Cells(2,5)
                Application.CutCopyMode = False
                rng.Copy
            End With
        End With
    
        'Paste
        With xSummary
            With xSummarySheet
                Set rng = .Cells(3,1)
                rng.PasteSpecial Paste:=xlpasteValues
            End With
        End With
    

    使用这行代码:

    xSummarySheet.Cells(3, 1) = xReportSheet.Cells(2, 5).Value
    

    如果不出意外,我相信您的代码至少会运行得更快。

    另外,不确定您使用的是.Activate 还是.Select。如果是,请不要。

    【讨论】:

    • 太好了,谢谢!消除复制和粘贴确实解决了那段代码中的闪烁问题。但是,现在我需要找到一种方法来解决从报告中复制图表对象并将它们作为图片粘贴到摘要工作簿中的方法。不过,我想我会就此提出一个新问题。再次感谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-25
    • 2015-11-05
    • 2013-06-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多