为什么Excel VBA中的'Application.Calculation = [value]'语句会擦除剪贴板内存?

时间:2014-12-20 05:38:10

标签: excel-vba clipboard copy-paste worksheet-function vba

问题定义:在以下Excel VBA示例代码段(参见清单1)中,该代码片段仅用于将Cell“A1”的内容复制粘贴到单元格“A2”,该行:

Application.Calculation = xlCalculationManual

似乎擦除了剪贴板内存,导致运行时错误。此外,以下任何类似的陈述都会产生同样的效果:

Application.Calculation = xlManual
Application.Calculation = xlAutomatic

清单1.

'demo Sub demonstrating Clipboard Memory flash by the statement
'Application.Calculation = xlCalculationManual
Sub CopyPaste()
    'select cell with some test value
    Range("A1").Select

    'selected value is copied to Clipboard memory
    Selection.Copy

    'This statement seemingly erases Clipboard memory
    'causing Run-Time Error 1004
    'if this line is commented-off, the procedure will run normally
    Application.Calculation = xlCalculationManual

    ' test if clipboard is empty ---------------------
    On Error Resume Next
    ActiveSheet.Paste
    If Err Then MsgBox "Error num: " & Err.Number & "|Clipboard is Empty": Err.Clear
    '-------------------------------------------------

    'target cell to copy value from Clipboard
    Range("A2").Select
    Selection.PasteSpecial Paste:=xlPasteValues
End Sub

如果您对上述声明发表评论,程序将完美运行。

问题:Application.Calculation = xlCalculationManual语句是否正确闪烁剪贴板内存,如果是,为什么?

任何对Microsoft Excel文档的引用都将不胜感激。

1 个答案:

答案 0 :(得分:2)

这是真的吗?显然是这样。我从来没有注意到;但我只是测试了它,这就是它的作用。是的,这是真的。

为什么?嗯,谁知道呢。我们不得不向微软的开发人员询问他们的想法是什么,或者这是否有意。但我不知道如何知道“为什么”会有任何实际用途。

重要的是正确的解决方法:将Application.Calculation = xlCalculationManual移到代码的顶部,或者至少在Copy语句之前移动。

更好的是,避免完全使用剪贴板,当然要避免使用Select - Selection表示法:

Range("A1").Copy Destination:=Range("A2")

或仅复制值:

Range("A2").Value = Range("A1").Value

或者,完全控制:

Dim temp as variant
temp = Range("A1").Value
'manipulate temp here if you so wish
Range("A2").Value = temp