
Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
|
13.10.2009, 12:01
|
|||
|---|---|---|---|
|
|||
Excel 2007. Как программно узнать количество строк автофильтра? |
|||
|
#18+
Всем привет. Есть таблица (прайс-лист). В первом столбце юзер отмечает нужные позиии. Например для печати или создания ценников. Чтобы не перебирать весь прайс на эти отметки (for/next), есть автофильтр: Dim table As ListOobject Set table = Workbook("прайс.xlsm").Worksheets("прайс").ListObjects("тбл_прайс") table.Range.AutoFilter 1,"<>" Теперь вопрос - как узнать количество строк автофильтра? То бишь отфильтрованных строк. Я пробовал это: table.AutoFilter.Range.Rows.Count Но такой вариант почему-то выдаёт общее количество строк в таблице. Хелм ми :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
13.10.2009, 12:03
|
|||
|---|---|---|---|
|
|||
Excel 2007. Как программно узнать количество строк автофильтра? |
|||
|
#18+
Опс, са себе и отвечаю: table.AutoFilter.Range.ListObject.ListColumns(1).DataBodyRange.SpecialCells(xlCellTypeVisible).Count Сорри за оффтоп, но, вдруг кому-то понадобиться :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2009, 16:43
|
|||
|---|---|---|---|
|
|||
Excel 2007. Как программно узнать количество строк автофильтра? |
|||
|
#18+
Ещё вариант. Дано: Книга = "прайс.xlsm" Лист = "прайс" Таблица = "тбл_Прайс" Столбцы = {1: "Метка", 2: "Наименование", 3: "Цена"} Задача: Программно получить количество отмеченных позиций в столбце "Метка" используя автофильтр. Решение: Public Function TableAutoFilter_RowsCount(ByVal field As Long) As Long Dim table As ListObject Application.ScreenUpdating = False Set table = Workbook("прайс.xlsm").Worksheets("прайс").ListObjects("тбл_Прайс") table.Range.AutoFilter field, "<>" TableAutoFilter_RowsCount = table.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas.Count table.Range.AutoFilter.ShowAllData Application.ScreenUpdating = True End Function ... Dim rows As Long rows = TableAutoFilter_RowsCount(1) ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2009, 17:24
|
|||
|---|---|---|---|
|
|||
Excel 2007. Как программно узнать количество строк автофильтра? |
|||
|
#18+
Забыл упомянуть, что доступ именно к отфильтрованным данным получается только при включенной фильтрации и только через table.DataBodyRange. SpecialCells(xlCellTypeVisible).Areas Пример: Дано: Книга = "прайс.xlsm" Лист = "прайс" Таблица = "тбл_Прайс" Столбцы = {1: "Метка", 2: "Наименование", 3: "Цена"} Задача: Программно отфильтровать таблицу по столбцу "Метка" Программно получить все значения строк столбца "Наименование" в отфильтрованной таблице Решение: ... Dim table As Long Dim index As Long Dim rows As Long Dim column As Long Dim value As String Set table = Workbook("прайс.xlsm").Worksheets("прайс").ListObjects("тбл_Прайс") column = table.ListColumns("Метка").Index Application.ScreenUpdating = False table.Range.AutoFilter column, "<>" rows = table.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas.Count If rows > 0 Then column = table.ListColumns("Наименование").Index For index = 1 To rows value = table.ListColumns(column).Range(table.DataBodyRange.SpecialCells(xlCellTypeVisible).Areas(index).row).Value '--- что-то делаем с полученными данными --- Next index End If Application.ScreenUpdating = True ... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2009, 17:32
|
|||
|---|---|---|---|
|
|||
Excel 2007. Как программно узнать количество строк автофильтра? |
|||
|
#18+
В последнем примере закралась позорная ошибка: Dim table As Long надо заменить на Dim table As ListObject ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|
18.10.2009, 18:23
|
|||
|---|---|---|---|
|
|||
Excel 2007. Как программно узнать количество строк автофильтра? |
|||
|
#18+
Мммм, ещё проблема нарисовалась: Areas содержит не строки, а диапазон строк! Т.е. если у вас отфильтрованные строки имеют, например, такую нумерацию: 10 11 12 100 101 102 2000 2001 2002 то Areas возвращает значение 3, хотя строк 9! Тут можно пробегать циклом по каждому Areas , благо Areas наследует Region . Но мне это не очень нравиться. Какое-то запутанное наследование в Office. Что-же, буду ковырять дальше... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
|
|
|

start [/forum/topic.php?fid=61&tablet=1&tid=2178955]: |
0ms |
get settings: |
8ms |
get forum list: |
9ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
190ms |
get topic data: |
6ms |
get forum data: |
1ms |
get page messages: |
21ms |
get tp. blocked users: |
1ms |
| others: | 230ms |
| total: | 470ms |

| 0 / 0 |
