2014-11-25 2 views
0

Вставить специальные значения для вставки значений из столбца в следующий столбец, но с трудностями заставить его работать.Copy-PasteSpecial сбой на больших диапазонах

Если я использую этот код работает отлично

Sub cps() 
Range("F2:F500").Copy 
Range("G2:G500").PasteSpecial Paste:=xlPasteValues 
End Sub 

загвоздка что это лист Excel, глядя на SQL, так количества строк изменений, сегодня есть 2100 и завтра может быть 2110. Так что я попытался ниже, чтобы убедиться, что я поймал все строки ..

Sub cps() 
Range("F2:F5000").Copy 
Range("G2:G5000").PasteSpecial Paste:=xlPasteValues ' <~~~~ Error 
End Sub 

Но я получаю ошибку на линии Range("G2:G5000").PasteSpecial Paste:=xlPasteValues

Как это сделать, если я не знаю, сколько строк re находятся в листе?

Так Томас дал мне решение, которое работает, но мне просто нужно адаптировать код, чтобы посмотреть на 3 отдельных листа, AP, EMEA и WH.

+0

Я проверил ваш код и не смог воспроизвести вашу проблему. Код работал должным образом. Можете ли вы привести воспроизводимый пример? –

+0

При указании на диапазон пасты укажите только верхнюю левую ячейку. –

ответ

1

Ваш код работает нормально. Может быть, это ошибка, потому что вы не запускаете ее из листового модуля, и вы не квалифицировали свой Range. Например: Sheets ("Лист1") .Range или ActiveSheet .Range как я ниже. Также этот код будет копировать только использованный диапазон, как вы просили.

Edit: Добавление материала, чтобы вызвать из любого листа

Создать новый модуль и переместить этот Sub в нем:

Public Sub CopyCOlumnF(strSheet As String) 

    Dim LastRow As Long 

    With Sheets(strSheet) 
     LastRow = .Cells(.Rows.Count, 6).End(xlUp).Row ' Column "F"=6 
     .Range("F1:F" & LastRow).Copy 
     .Range("G1:G" & LastRow).PasteSpecial Paste:=xlPasteValues 
    End With 

End Sub 

Тогда в любом из sheetmodules, вызовите суб например:

Sub cps() 
    CopyCOlumnF (ActiveSheet.Name) 
End Sub 

Вы также можете позвонить им из любого места и применить трюк на любой лист:

CopyCOlumnF ("Sheet1") 
CopyCOlumnF ("Sheet2") 
+0

Работает как шарм, спасибо Томасу. Один вопрос, хотя у меня есть 3 листа и вы хотите запустить этот макрос против всех 3, как бы я это сделал? Таблицы называются AP, EMEA и WH –

+0

Редактируйте свой первоначальный вопрос, пока я редактирую исходный ответ –

+0

Отредактированное решение –

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