Как выбрать и скопировать данные из ячейки D6 и только видимые данные из отфильтрованной таблицы с диапазоном от D13 до D9999 с помощью VBA?

#excel #vba #filter #copy

Вопрос:

Я пытаюсь создать кнопку, которая будет фильтровать таблицу, выбирать и копировать данные из ячейки D6 и только видимые данные из отфильтрованной таблицы с диапазоном от D13 до D9999 в буфер обмена, чтобы я мог использовать информацию для вставки ее в другое место, например, в Word, блокнот, одну заметку и т. Д., Используя CTRL V. Я написал этот код, но ничего не вставляется, когда я нажимаю CTRL V. Я думаю, что это связано с тем, что я не фильтрую, что я делаю в конце концов. Но это важно. Как мне заставить это работать?

 Dim ws As Worksheet Set ws = Worksheets("Cost") ws.Range("D13:D9999").AutoFilter field:=1, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor Range("D6","D13:D9999").Select Selection.COPY ws.Range("D13:D9999").AutoFilter End Sub  

Некоторое время я изучал это, но, похоже, не могу найти ничего, что могло бы сработать. Спасибо.

Комментарии:

1. Я боюсь, что вставить диапазон в блокнот невозможно. Даже в Слове, если оно прерывистое, не все так просто…

Ответ №1:

Qucik и грязное решение состоит в том, чтобы

  • снимите AutoFilter в конце. Фактически, убедитесь, что .Copy это последняя команда в коде — это действие сохранит Application.CutCopyMode скопированный текст в буфере обмена до дальнейших действий.
  • И копируйте только один диапазон, т. Е. удаляйте D6 из копии.
 Dim ws As Worksheet Set ws = Worksheets("Cost") ws.Range("D13:D9999").AutoFilter field:=1, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor Range("D13:D9999").Select Selection.Copy  End Sub  

Ответ №2:

Если вы хотите скопировать видимые ячейки только после применения фильтра, сделайте что-нибудь вроде следующего: (обратите внимание, что я избегаю использования Select)

 Set r1 = [d6]  'filter the range Set r2 = Range("d10:d20")  r2.AutoFilter field:=1, Criteria1:=RGB(255, 255, 0), Operator:=xlFilterCellColor  Range(r1, r2.SpecialCells(xlCellTypeVisible)).Copy   

Затем вам нужно будет выполнить вставку, прежде чем отключать автофильтр.

Комментарии:

1. Любые предложения о том, как я могу это сделать с помощью одной кнопки или это должны быть две кнопки. Один для копирования, а другой для снятия фильтрации? Спасибо за вашу помощь.

2. @Отлично Я не знаю никакого способа, чтобы Excel знал, когда вы выполнили свою control v операцию. Так что нет, если это то, что ты делал, две кнопки.