Получение полного скопированного набора строк в VBA и сохранение его в переменной - PullRequest
0 голосов
/ 14 сентября 2011

У меня довольно простой синтаксический вопрос:

Я пытаюсь скопировать и вставить n строк из одного файла Excel в другой.Кроме того, я хотел бы сохранить общее количество скопированных строк в переменную.Может кто-нибудь помочь мне в этом?

Например:

1)

Activate CSV file
Apply Filter to Column B (Page Title) & uncheck "blanks" ("<>") filter**
Windows("Test_Origin.xlsm").Activate
ActiveSheet.Range("$A$1:$J$206").AutoFilter Field:=2, Criteria1:="<>"

2)

Copy Filtered Lines with data (Excluding Row 1)
Range("B2:F189").Select
Selection.Copy
copiedRowTotal = total *FILTERED* rows copied over from original sheet, then Test Number iterates that many times
copiedRowTotal = Selection.Rows.Count
MsgBox copiedRowTotal

Спасибо

Ответы [ 3 ]

2 голосов
/ 14 сентября 2011

Косвенным способом сделать это является

Range("B2:F189").Copy
Range("M2").PasteSpecial xlPasteValues
copiedRowTotal = Selection.Rows.Count
Selection.Clear

Код копирует диапазон и выполняет специальную операцию вставки в отдельном месте.
При этом в M2 копируются только отфильтрованные строки, а область (куда вставляются отфильтрованные строки) выделяется, когда выполняется операция PasteSpecial.

Выполнение Selection.Rows.Count дает единицу, количество отфильтрованных строк, которые были вставлены.
После определения количества отфильтрованных строк выбор очищается.

1 голос
/ 14 сентября 2011

Я не верю, что есть способ получить количество видимых клеток напрямую.Я попытался использовать функцию «SpecialCells (xlSpecialCellsVisible)», но не смог получить правильный счет с применением фильтра.Вот небольшая функция, которую я написал, которая работает с примененным фильтром.

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

0 голосов
/ 14 сентября 2011
copiedrowtotal = selection.rows.count ' its not selection.totalcells

Я думаю, это бы сработало

После просмотра вашего обновления позвольте мне сказать вам, вероятно, это будет работать

dim i as long
i = Application.WorksheetFunction.Subtotal(2,worksheets("Sheet").Range("B2:F189"))

Теперь у меня есть количество отфильтрованных строк! Если вы включили заголовок в свой диапазон, тогда делайте -1 в конце, иначе просто оставьте его

argument 2 in subtotal is => counting the rows and then sheet name 
and then specify range to count filtered rows

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

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