Copy-PasteSpecial не работает на больших диапазонах

Pastespecial, чтобы вставить значения из столбца в следующий столбец, но с трудностями заставить его работать.

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

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

Snag – это лист 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

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

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

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

Изменить: добавление материала для вызова его с любого листа

Создайте новый модуль и переместите в него 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 

Затем на любом из ваших листовых модулей вызовите sub следующим образом:

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

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

 CopyCOlumnF ("Sheet1") CopyCOlumnF ("Sheet2") 
Давайте будем гением компьютера.