2015-08-14 4 views
0

Я хотел бы создать функцию, которая копирует определенные диапазоны excel в листах и ​​вставляет эти диапазоны в «основной файл».Копирование и вставка информации в цикле for

Теперь я пытаюсь с этим кодом:

Sub ranges() 

    Dim month As Variant 
    Dim months As Variant 

    months = Array("V01 DEN HAAG", "V02 AMSTERDAM") 

    Dim destinationRange As Excel.range 
    Set destinationRange = Sheets("DATASET").range("B3").End(xlDown).Offset(1, 0) 

    For Each month In months 

     Dim sourceRange As Excel.range 
     Set sourceRange = Sheets(month).range("H7", range("H7").End(xlToRight)) 

     Call sourceRange.Copy 
     Call destinationRange.PasteSpecial 

    Next month 

End Sub 

Но я получаю приложения или объекта определенную ошибку. Любые мысли о том, что пошло не так? Благодаря!

+0

, какая линия даст вам ошибку? можешь сказать? –

+0

Set sourceRange = Листы (месяц) .Range («H7»). End (xlToRight) –

ответ

1

Добавление к anwser mielk проблема находится в codeline:

Set sourceRange = Sheets(month).range("H7", range("H7").End(xlToRight)) 

Это происходит потому, что если вы собираете из нескольких листов данных и использовать range("H7").End(xlToRight будет искать это на активном листе. Поэтому он может найти правильный диапазон, если он находится на правильном листе.

, используя следующий код:

Set sourceRange = Sheets(month).Range("H7", Sheets(month).Range("H7").End(xlToRight)) 

он будет работать независимо от того, который лист активен в данный момент. еще одно дополнение, что вы можете копировать и вставлять в 1 строке кода:

sourceRange.Copy Destination:=destinationRange 

см ниже всего кода:

Sub ranges() 
Dim month As Variant 
Dim months As Variant 
months = Array("V01 DEN HAAG", "V02 AMSTERDAM") 

For Each month In months 
    Dim sourceRange As Excel.Range 
    Dim destinationRange As Excel.Range 
    With Sheets("DATASET") 
     Set destinationRange = .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0) 
    End With 
    Set sourceRange = Sheets(month).Range("H7", Sheets(month).Range("H7").End(xlToRight)) 
    sourceRange.Copy Destination:=destinationRange 

Next month 
End Sub 
0

Возможно, причина этой ошибки в том, что у вас нет никаких значений на листе «DATASET», столбец B, ниже 3. row.

Посмотрите на эту строку кода:

Set destinationRange = Sheets("DATASET").range("B3").End(xlDown).Offset(1, 0) 

Сначала он занимает диапазон от клетки B3 до последней ячейки в этом столбце (B1048576 в Excel 2007+).

После этого он пытается смещать этот диапазон на одну строку вниз (поэтому он пытается создать диапазон, имеющий одинаковое количество строк и столбцов, но начиная с одной ячейки ниже).

Однако это невозможно, так как такой диапазон должен начинаться в ячейке B4 и заканчиваться ячейкой B1048577, а Excel имеет только 1048576 строк.


Если вы хотите назначить первую пустую строку в переменной destinationRange вы должны заменить этот код:

Set destinationRange = Sheets("DATASET").range("B3").End(xlDown).Offset(1, 0) 

с ниже:

With Sheets("DATASET") 
    Set destinationRange = .Cells(.Rows.Count, 2).End(xlUp).Offset(1, 0) 
End With 

Оба эти заявления похожи. Разница в том, что второй начинается с последней ячейки в столбце B и ищет первую непустую ячейку выше.

+0

спасибо за ваш комментарий, но проблема, похоже, не имеет ничего общего с параметром назначения, поскольку диапазон выбора higlighted => (Set sourceRange = Sheets (месяц).диапазон («H7», диапазон («H7»). Конец (xlToRight))) Любые мысли о том, как это может произойти? –

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