Excel VBA 粘贴修改后的值而不是原始值

Excel VBA pastes modified value instead original one

我下面的宏将值 (Hello) 插入单元格 A1 并使用复制方法复制该值。然后它改变了 A1 中的值 (Hi)。

最后我想将(原始)值粘贴到另一个单元格中,例如B1. 我很惊讶 Excel 粘贴修改后的值而不是原来的值(为什么?复制之前已经修改了!)。

注意:我的宏以 CopyAndPasteData() 开头。

Sub CopyAndPasteData()
  Range("A1") = "Hello"
  CopyData
  Range("A1") = "Hi"
  PasteData
End Sub

Sub CopyData()
  Range("A1").Copy
End Sub

Sub PasteData()
  Range("B1").PasteSpecial
End Sub
sub test()
    dim s as String
    Range("A1") = "Hello"
    s = Range("A1").value
    Range("B1").value = s
    PasteData
end sub    

这是你能做的最好的事情。创建一个变量并将 A1 的值分配给特定变量,以便您可以通过访问该变量在任何地方使用第一个值。

发生这种情况的原因是 .copy 方法只是保存对复制单元格的引用,而不是保存其当前属性(即文本和格式)。

只有在发生 .paste 时,才会读取复制的单元格的属性并将其应用于粘贴单元格。

这就是为什么即使 .copy 发生在您的更改之前,更改仍会反映在 .paste 中。

这在正常使用 excel 时并不明显,因为一旦您对电子表格进行更改,剪贴板就会清除,因此您没有机会在更改复制的单元格后进行粘贴。

为了支持这一说法,如果您在 PasteData 之前添加 Range("A1").Delete,您将收到运行时错误,因为 .copy 引用现在指向一个不存在的对象.