Показать сообщение отдельно
Старый 14.11.2006, 11:01   #17  
Gustav is offline
Gustav
Moderator
Аватар для Gustav
SAP
Лучший по профессии 2009
 
1,858 / 1152 (42) ++++++++
Регистрация: 24.01.2006
Адрес: Санкт-Петербург
Записей в блоге: 19
Цитата:
Сообщение от blokva Посмотреть сообщение
Я понимаю, что "Автофильтр - это Excel.Application" но почему тогда через ADODB я его получаю как таблицу? Более того, автофильтр однажды включенный создает эту коллизию и даже если я его потом выключаю, сиравно получаю лишнюю таблицу в ADODB... еслиб какое свойство этой псевдотаблицы получать и анализировать...
Эксперимент (Excel 2000, русский):
----------------------------------------------------------------
1. Создадим в Excel новую рабочую книгу.

2. В окне отладки (Ctrl+G) выполним команду:
? Thisworkbook.Names.Count
0
Т.е. коллекция имен (именованных диапазонов) у нас пустая

3. На первом листе создадим афтофильтр: в первой строке - заголовки колонок - Field1 и Field2 (соответственно в ячейки A1 и B1), в остальные строчки в ячейки A2:B10 введем какую-нибудь информацию для примера (допустим, числа от 1 до 9).

4. Стоя на любой ячейке диапазона, выполним команду меню: Данные / Фильтр / Автофильтр

5. В окне отладки (Ctrl+G) выполним команду:
? Thisworkbook.Names.Count
1
Т.е. в коллекции именованных диапазонов что-то появилось.

6. Что же это?
? Thisworkbook.Names(1).Name
Лист1!_FilterDatabase

? Thisworkbook.Names(1).RefersTo
=Лист1!$A$1:$B$10

7. Выключим автофильтр: Данные / Фильтр / Автофильтр

8. Повторим пункт 6 - всё то же самое.

Таким образом, применение автофильтра создает на рабочем листе именованный диапазон со скрытым служебным именем. ADO в Excel воспринимает как "таблицы схемы" и рабочие листы, и именованные диапазоны ("схема" - рабочая книга). Возможно, есть какой-то признак, позволяющий различать листы и диапазоны в контексте ADO, но мне он пока неизвестен...
За это сообщение автора поблагодарили: blokva (2).