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
引用现在指向一个不存在的对象.
我下面的宏将值 (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
引用现在指向一个不存在的对象.