2013-04-08 3 views
2

У меня возникли некоторые проблемы с тем, что я думаю, что это простая команда VBA:Смещение и изменение размера с помощью VBA

Worksheets("Sheet").Range("namedrange_d").Resize(0, 4).Offset(6, 0).Copy _ 
    Destination:=Worksheets("Sheet1").Range("namedrange").Resize(0, 4).Offset(6, 0) 

Я хочу, чтобы скопировать значения по умолчанию в диапазоне 5 клеток в ширину, то есть 7 ячеек ниже опорной ячейки (namedrange_d). В чем проблема с синтаксисом?

ответ

6

Ноль не является допустимым аргументом для изменения размера. Если вы хотите сохранить исходный размер диапазона, просто опустите аргумент. В противном случае вам нужно явно указать количество строк и столбцов. Вот как вы бы сохранить исходное число строк

Worksheets("Sheet").Range("namedrange_d").Resize(, 4).Offset(6, 0).Copy _ 
    Worksheets("Sheet1").Range("namedrange").Resize(, 4).Offset(6, 0) 
+0

Я согласен, что это лучший ответ, ближайший к попытке OP, но правильный (!) Мне нравится использование пустого параметра в 'Resize (, 4)' - +1 для этого. – Floris

1

Первое смещение, а затем использовать Range("A1:E1") для ссылки на ширину площади 5 столбцов:

Worksheets("Sheet").Range("namedrange_d").Offset(7,0).Range("A1:E1").Copy Destination:=Worksheets("Sheet1").Range("namedrange") 

... Это должно быть все, что вам нужно

1

Я хотел бы сделать следующее (я был очень четко - это, как правило, чтобы сделать код, который легче читать и отлаживать, с минимальным влиянием скорости Это. не «умный»).

Dim dataSource As Range 
Dim firstCellSource, firstCellDest As Range 

Set firstCellSource = Worksheets("Sheet1").Range("namedrange_d").Offset(6, 0) 
Set firstCellDest = Worksheets("Sheet1").Range("namedrange").Offset(6, 0) 

Set dataSource = Range(firstCellSource, firstCellSource.Offset(0, 4)) 

dataSource.Copy Destination:=firstCellDest 

Как это код, по существу, «документирован», и это легко видеть, что вы делаете. Обратите внимание, что вам нужно только указать первую ячейку адресата.

Смежные вопросы