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

时间:2019-01-07 18:40:56

标签: excel vba copy-paste

下面的宏将值(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

2 个答案:

答案 0 :(得分:2)

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

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

答案 1 :(得分:1)

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

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

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

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

为证明这一点,如果在Range("A1").Delete之前添加PasteData,则会出现运行时错误,因为.copy引用现在指向不存在的对象。 / p>