2017-02-21 11 views
1

Я пытаюсь вставить некоторые значения, которые я ранее скопировал, но я теряю данные, поскольку я очищаю ячейки назначения заранее.Excel Macro для копирования, удаления и вставки без потери значений копирования

Это пример кода:

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»), так что я могу вставить это позже?

ответ

4

Очевидный ответ: сделать это в другом порядке. Кроме того, нет необходимости использовать 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

Да, я пытался упростить пример. Оригинальная копия из другого открытого файла. – Selrac

+0

Извините за отсутствие этого, я обновил – CallumDA

0

Вы можете обойти это, вставляя диапазон где-то еще заранее.

Range("A1:B3").Copy Range("F1") 
Range("C1:D3").ClearContents 
Range("F1:G3").Cut Range("C1") 
Смежные вопросы