2016-01-11 4 views
0

Я пытаюсь сохранить значение диапазона 8 x 1 в диапазоне одинаковых размеров, но на другом листе в книге. Это было бы легко, за исключением того, что мой скрипт перебирает разные диапазоны этих одинаковых размеров, и мне нужно хранить их на втором листе. В настоящее время мой код выглядит так:Использование переменной для определения диапазона

Sheets("Sheet1").Range(Cells(i, 2), Cells(i + 7, 2)).Value = Sheets("Sheet2").Range("OriginalData").Value 

Где «i» - это переменная, используемая в качестве итератора в цикле.

Этот код вызывает ошибку "Ошибка 1004" Определенная пользователем или объектная ошибка "". Может кто-то объяснить, что я делаю неправильно, и как правильно определять объекты диапазона динамически таким образом?

+0

Я не считаю, что это дубликат вопроса, к которому вы привязались, поскольку основная проблема здесь заключается в том, чтобы динамически определять диапазон назначения, а не копировать с неактивного листа. – Phil

+0

Возможно, нет; возможно, дубликат [этого аналогичного ответа] (http://stackoverflow.com/questions/27763089/count-the-number-of-rows-in-another-sheet/27763394#27763394). – Jeeped

+0

Да, этот ответ разрешил бы эту проблему ... но трудно найти, когда вопрос другой! – Phil

ответ

2

Ваша проблема заключается в том, что Cells внутри Sheets("Sheet1").Range не знают, что они должны принадлежать к Sheets("Sheet1").

with Sheets("Sheet1") 
    .Range(.Cells(i, 2), .Cells(i + 7, 2)) = _ 
     Sheets("Sheet2").Range("OriginalData").Value 
end with 

'alternate 
Sheets("Sheet1").Range("B" & i).Resize(8, 1) = _ 
     Sheets("Sheet2").Range("OriginalData").Value 

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

+0

Спасибо! Я выбрал ваш альтернативный вариант, так как он меньше кода, и эта вещь уже слишком длинная, как есть. Он работает точно так, как мне нужно. – Phil

-1

Возможно ли скопировать и вставить работу? Я не уверен в специфике ваших данных, но похоже, что копия и вставка будут работать лучше.

Так как

Sheets("Sheet1").Range("x:x").Copy Sheets("Sheet2").Range("x:x") 
+0

Да, копирование/вставка работала, но исходные ячейки данных являются формулами, и я использую специальную вставку, чтобы принимать только значения. Поскольку этот сценарий может занимать очень много времени, я хочу экономить время, где это возможно. Мне сказали, что метод, который я пытаюсь использовать, более эффективен. – Phil

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