问题定义:在以下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文档的引用都将不胜感激。
答案 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