2015-05-27 1 views
3

Я пытаюсь скопировать диапазон из одного листа в другой. У меня есть несколько диапазонов, которые я хотел бы копировать и вставлять в разные точки на новом листе (например, я хочу вставить первый диапазон в D3, затем следующий диапазон до E12 и т. Д.), Поэтому я использую свойство ячеек для описания диапазона. Однако по какой-то причине, когда я описываю диапазон, который я хочу вставить на новом листе, используя формат ячеек, а не просто вставляя строку, он не работает.Скопируйте диапазон из одного листа в другой с помощью свойства ячеек

Эта строка кода делает работу:

Sheets("Sheet1").Range(Cells(2, 3), Cells(10, 3)).Copy _ 
    Destination:=Sheets("Sheet2").Range("D3") 

но это один не делает:

Sheets("Sheet1").Range(Cells(2, 3), Cells(10, 3)).Copy _ 
    Destination:=Sheets("Sheet2").Range(Cells(3,4)) 

Когда я запускаю последнюю строку кода, я получаю «Ошибка выполнения 1004: определяемая приложением или объектная ошибка ". Почему это и как я могу это исправить?

ответ

7

Вы указываете родительский элемент Range, но не ячейки. Короче говоря, вы пытаетесь определить диапазон ячеек на Sheet1, которые содержат ячейки на Sheet2 и/или наоборот.

dim ws2 as worksheet 
set ws2 = sheets("Sheet2") 

with sheets("Sheet1") 
    .Range(.Cells(2, 3), .Cells(10, 3)).Copy _ 
     Destination:=ws2.Range(ws2.Cells(3,4)) 
end with 

Период префиксов (так называемый . или полная остановка) означает, что родитель .Range и .Cells определяется с With...End With statement. Чтобы сократить код, необходимый для правильного определения диапазона на Sheet2, я назначил переменную типа рабочего листа и использовал его для отображения родительского элемента как диапазона, так и ячеек.

FWIW, ws2.Range(ws2.Cells(3,4)) является избыточным. ws2.Cells(3,4) достаточно.

+2

Другой в длинной строке веских причин для _never_ использовать неявные ссылки. – FreeMan

+0

++ приятно объяснил :) Вы сегодня в огне :) –