Управление данными Excel с помощью Access VBA 2010 - PullRequest
1 голос
/ 19 октября 2011

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

ADODB больше не поддерживается в Access 2007/2010, и я не думаю, что вы можете «запросить» электронную таблицу, используя DAO или ADO.

Итак, есть ли альтернативы?

Ответы [ 2 ]

0 голосов
/ 14 мая 2012

В вашем проекте VBA в Access нажмите «Инструменты / Ссылки» и найдите «Библиотека объектов Microsoft Excel 14.0». Это даст вам доступ ко всем объектам VBA Excel, чтобы вы могли делать с таблицей все, что захотите.

Как уже говорили, выполнение запросов на листе невозможно. Если вы привыкли мыслить в терминах баз данных, подумайте о запуске проверки шаблона, чтобы убедиться, что заголовки совпадают, и вы, скорее всего, получите хороший файл, из которого читаете. Затем, после того, как вы проверили настройки документа, SQL вставляет строки с записями в них в таблицу в базе данных Access, а затем запускайте ваши запросы оттуда. Проверьте здесь для написания вашего кода SQL:

Справка по операторам SQL

Если вы хотите стать более продвинутым в своем VBA, если ваши файлы небольшие, вы можете запустить поиск, настроив объект с помощью setters / getters и сохранив записи в классе коллекции, а затем переберите его с данными, которые вы ищете за.

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

Коллекции в Visual Basic

Удачи!

0 голосов
/ 21 октября 2011

Я не думаю, что вы можете "запросить" электронную таблицу, используя DAO или ADO.

Вы действительно можете запросить книгу Excel с помощью ADO у поставщика OLE DB для Access (Jet, что угодно). Подробнее см. в этой статье MSDN .

ADODB больше не поддерживается в Access 2007/2010,

Это не тот случай. Я думаю, вы, должно быть, что-то неправильно поняли, что неудивительно, если учесть, что в Access есть много глупостей, связанных с «ADO vs DAO» в Access.

Я не совсем уверен, что произошло, когда класс ADO был представлен сообществу Access2000, но, похоже, многие старожилы остались с обиженным эго / гордостью. Маркетинговое послание от Microsoft действовало: «DAO - это старый способ работы, а ADO - новый». В намеренном шаге MS новые функции двигателя, как правило, были доступны только через ADO.

Как часто бывает, когда под угрозой закрепляются позиции, давние поклонники Access + DAO встречали обратное движение. Это часто принимало форму «бросай достаточно грязи, а некоторые будут прилипать». Люди, недавно прибывшие в AccessLand, будут смущены смешанными сообщениями. В новостных группах начинающие MVP Access эмулировали позицию анти-ADO существующих MVP Access.

Между выпусками 200 и 2007 продукт Access стал IMO несколько устаревшим с точки зрения механизма, ответственность за который была передана команде SQL Server, которая на практике отказалась от него: их попытки сделать это Соответствие стандарту начального уровня SQL-92 были сорваны командой Windows, компоненты которой опирались на функции, которые бросали вызов стандарту. Классическая команда ADO была также расформирована. Visual Basic COM, который эффективно разделял библиотеки VBA с пакетом Office, был убит в пользу VB.NET, и родился ADO.NET,

Команда Access2007 снова встряхнулась. Они восстановили движок команд SQL Server и Windows, взяв частную ветку. Они отказались от безопасности на уровне пользователя, по-видимому, потому что это было слишком сложно для них поддерживать. Они добавили многозначные типы, которые, возможно, нарушают 1NF. Смелый материал! В то время как некоторые функции можно было бы разместить в ADO classic, создав новый поставщик OLE DB для Access, другие не смогли. Например, полная поддержка (например, обновление через SQL) для многозначных типов данных в ADO потребует изменения классических библиотек ADO, которыми группа Access не владеет.

Поскольку DAO принадлежала Access, в новой версии (называемой ACEDAO) появились функции, которых не хватало бы новому поставщику OLE DB со старыми классическими библиотеками ADO (хотя ADO требовалось использовать движок на 64-битных машинах). Однако они не сделали ретроспективного исправления DAO, чтобы приспособить функционал эры Access2000, который входил только в ADO.

Естественно, команда Access выдвинула ACEDAO в качестве первоклассного гражданина. Конечно, давние поклонники Access + DAO были в восторге: «ADO устарела в пользу ADO.NET», - кричали они. По правде говоря, чистый результат - смешанная сумка. См. эту тему для получения полной информации.

...