Проблемы с копированием фильтрованных данных в новую рабочую книгу

Я использую этот код для фильтрации базы данных, а затем скопируйте полученные отфильтрованные данные на рабочий лист во второй книге.

With ws_sched Set srng = .Range(.Cells(1, 1), .Cells(.Range("A" & Rows.count).End(xlUp).row, .Cells(1, Columns.count).End(xlToLeft).Column)) srng.AutoFilter _ Field:=2, _ Criteria1:=trgt_date, _ VisibleDropDown:=False 'srng.SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1") srng.Copy ws_data.Range("A1").PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False If .AutoFilterMode Then .AutoFilterMode = False End With 

'ws_sched' – это сырая база данных, которая фильтруется. «ws_data» – это лист назначения во второй книге.

Фильтр работает, но копия и вставка оставляет только строку заголовка исходной базы данных (первая строка из множества строк фильтрованных данных).

Кто-нибудь может помочь мне решить вопрос о том, почему мои отфильтрованные данные не передаются?

Вышеприведенный код отражает изменения, внесенные мной из моего исходного кода, основываясь на моем понимании предложения Тьяго. Это еще только копирует строку заголовка и не фильтрует данные.

Должно быть, у вас есть только заголовок в столбце ws_sched A, который дает вам глубину строк srng , поэтому он задается в range с одной строкой

вы можете доказать, что добавив Msgbox srng.Address сразу после Set srng =...

Таким образом, у вас есть два способа:

  • выберите другой столбец для ввода глубины строк данных из

    в этом случае я бы пошел со столбцом «B», так как это тот, который вы, похоже, хотите фильтровать

     Set srng = .Range(.Cells(1, 1), .Cells(.Range("B" & Rows.Count).End(xlUp).row, .Cells(1, Columns.Count).End(xlToLeft).Column)) 
  • вывести глубину строк данных с помощью UsedRange

    в этом случае вам нужно только изменить оператор копирования a следующим образом:

     Intersect(.UsedRange, .Columns(2).EntireRow, srng.EntireColumn).SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1") 

Наконец, вы можете иметь случай, когда столбец A полностью пуст, т.е. даже без заголовка. в этом случае вы должны просто сменить весь свой код на попрошайничество с помощью столбца B

  Set srng = .Range(.Cells(1, 2), .Cells(.Range("B" & Rows.Count).End(xlUp).row, .Cells(1, Columns.Count).End(xlToLeft).Column)) srng.AutoFilter _ Field:=1, _ Criteria1:=">=2", _ VisibleDropDown:=False srng.SpecialCells(xlCellTypeVisible).Copy ws_data.Range("A1") 

Попробуйте PasteSpecial скопированные данные вместо того, чтобы сообщать адресату, как вы сейчас делаете

Этот код VBA поможет вам фильтровать данные в другой лист.

Sub copy_filtered_data ()

Рабочие листы («Ввод данных»). ИспользуетсяRange.SpecialCells (xlCellTypeVisible) .Copy _ Назначение: = Рабочие листы («Результаты»). Диапазон («A1»)

End Sub

NB: Вы также можете использовать этот код с кодом Autofilter.

  • VBA для поиска значения, а затем передачи данных с одного листа
  • Вставить из Excel в приложение C #, сохраняя полную точность
  • Атомная копирование и вставка как значение и заполнение всей строки
  • Countif DATE - вставить формулу и увеличить дату на 1 день, используя тот же диапазон для ссылки с
  • VBA - Ошибка синтаксиса PasteKeys Paste - при замене ячеек excel
  • C # Excel Вырезать / вставлять ячейки условно
  • Как вставить диапазон на другой рабочий лист с фильтрами
  • Скопируйте диапазон из одной книги и вставьте в лист другой VBA
  • Редактор пользовательского интерфейса Kendo: копирование / вставка из Excel с форматом
  • Включить форматирование информации в буфер буфера обмена буфера обмена для вставки в Excel
  • Как указать начальную строку для столбца «copy column vba»?
  • Давайте будем гением компьютера.