Excel宏可以复制,删除和粘贴,而不会丢失复制值

时间:2017-02-21 13:42:04

标签: excel vba excel-vba

我试图粘贴我之前复制过的某些值,但是我在预先清除目标单元格时丢失了数据。

这是代码示例:

Range("A1:B3").Select
Selection.Copy
Range("C1:D3").Select
Selection.ClearContents 'At this point the clipboard is cleared
Range("C1").Select
ActiveSheet.Paste 'I get an error here as the clipboard has been cleared

考虑到我不能先清除内容,有没有办法存储Range的内容(" A1:B3")以便我以后可以粘贴它?

3 个答案:

答案 0 :(得分:5)

显而易见的答案是:按照其他顺序执行。此外,无需使用Select

Range("C1:D3").ClearContents
Range("A1:B3").Copy Range("C1")

此外,您应该尝试完全限定范围。也就是说,确切地说这些范围的位置。

With ThisWorkbook.Worksheets("Sheet1")
    .Range("C1:D3").ClearContents
    .Range("A1:B3").Copy .Range("C1")
End With

如果出于某种原因(?),您只能在...后清除内容。您可以将值存储在这样的变量中

With ThisWorkbook.Worksheets("Sheet1")
    Dim v as Variant
    v = .Range("A1:B3").Value
    .Range("C1:D3").ClearContents
    .Range("C1:D3").Value = v
End With

答案 1 :(得分:0)

你可以通过预先粘贴其他地方的范围来解决这个问题。

Range("A1:B3").Copy Range("F1")
Range("C1:D3").ClearContents
Range("F1:G3").Cut Range("C1")

答案 2 :(得分:0)

您犯的错误是,它引用复制数据的单元格,而不是将其移动到剪贴板或内存中。尝试这样的事情。

dim SelectionSave as string

Range("A1:B3").Select
SelectionSave = activecell.value
Range("C1:D3").Select
Selection.ClearContents 
Range("C1").Select
activecell.value = SelectionSave

如果您清除单元格中的内容,则引用的是空单元格,如果先将内容保存到内存中,则可以在清除后将这些内容移回单元格中。