Мне нужно реализовать макрос VBA, который копирует данные из одного листа Excel и помещает определенный столбец в другой.

Sub sbCopyRangeToAnotherSheet()

'Method 1
Sheets("Sheet1").Range("A1:B10").Copy Destination:=Sheets("Sheet2").Range("E1")

'Method 2
'Copy the data
Sheets("Sheet1").Range("A1:B10").Copy
'Activate the destination worksheet
Sheets("Sheet2").Activate
'Select the target range
Range("E1").Select
'Paste in the target destination
ActiveSheet.Paste

Application.CutCopyMode = False

End Sub

Это не будет работать для новых листов, названных, например, Листом 3, и не будет эффективно работать для отфильтрованных данных. Мне нужен код, который может скопировать отфильтрованные данные и вставить определенный столбец в другой лист.

1 ответ1

0

Чтобы просто скопировать видимые ячейки в отфильтрованном диапазоне, вам нужно указать, что именно это вы и пытаетесь сделать. Например:

Sheets("Sheet1").Range("A1:B10").SpecialCells(xlCellTypeVisible).Copy _
                                 Destination:=Sheets("Sheet2").Range("E1")

Несколько хороших примеров того, как использовать автофильтр в VBA-коде , можно найти здесь.

Я не вижу причин, почему это не должно работать, когда вы ссылаетесь на другие листы, за исключением того, что вы используете Activate и Select возможно, отменяя действие копирования в какой-то момент. Есть ли причина, по которой вы делаете это таким образом, вместо того, как я обрисовал это выше, с указанным целевым диапазоном, указанным при копировании? Я вижу, как вы делаете это в своем первом примере, который я предполагаю работать.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .