Автофильтр, копирование и вставка. Данные не вставляются, хотя код работает без ошибок - PullRequest
0 голосов
/ 09 января 2019

Ниже код работает "отлично". Я вижу, что данные отфильтрованы, и я вижу, что выбран правильный диапазон. И я предполагаю, что данные в диапазоне скопированы.

Однако при попытке вставить скопированные данные ничего не появляется. Я вижу, что в диапазоне есть данные, которые предположительно скопированы.

Странно то, что я знаю, что в какой-то момент это сработало, и вдруг это не сработало.

Const sFILE_PATH    As String = "C:\Downloads\"
Const sEXTENSION    As String = ".xlsm"

Dim lastrow As Long
Dim lastrow_Offset As Long

Dim wbk As Workbook
Dim sFileName As String

sFileName = "2018"

Set wbk = Workbooks(sFileName & sEXTENSION)


lastrow_Offset = ThisWorkbook.Sheets("Test").Cells(Rows.Count, "h").End(xlUp).Row
lastrow = wbk.Sheets("Acc").Cells(Rows.Count, "C").End(xlUp).Row

Application.ScreenUpdating = False




With wbk.Sheets("Acc")
    .AutoFilterMode = False
    .Range("A4:AL" & lastrow).AutoFilter Field:=37, Criteria1:="=NC", Operator:=xlFilterValues
    .Range("A4:AL" & lastrow).AutoFilter Field:=38, Criteria1:="=New", Operator:=xlFilterValues



     Debug.Print Range("C5:C" & lastrow).SpecialCells(xlCellTypeVisible).Address

    .Range("C5:C" & lastrow).SpecialCells(xlCellTypeVisible).Copy



    .AutoFilterMode = False
End With

ThisWorkbook.Sheets("Test").Range("H26").Offset((lastrow_Offset + 1) - 26, 0).Insert

Application.ScreenUpdating = True

1 Ответ

0 голосов
/ 09 января 2019

Вы не вставляете свои данные. Команда Insert просто создает новую (пустую) строку, вот и все.

Измените свой код на

With wbk.Sheets(1)
    .AutoFilterMode = False
    .Range("A4:AL" & lastrow).AutoFilter Field:=37, Criteria1:="=NC", Operator:=xlFilterValues
    .Range("A4:AL" & lastrow).AutoFilter Field:=38, Criteria1:="=New", Operator:=xlFilterValues

    lastrow_Offset = ThisWorkbook.Sheets("Test").Cells(Rows.Count, "H").End(xlUp).row
    Dim destCell As Range
    Set destCell = ThisWorkbook.Sheets("Test").Range("H26").Offset((lastrow_Offset + 1) - 26, 0)
    .Range("C1:C" & lastrow).SpecialCells(xlCellTypeVisible).Copy destCell

    .AutoFilterMode = False
End With

Обновление : как указала Сиддхарт Роут, я ошиблась, Insert вставляет данные. Однако, похоже, что это не работает, если для копирования был выбран несмежный диапазон, как это происходит в большинстве случаев для отфильтрованных данных.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...