Как использовать VBA для автоматизации нескольких приложений Office? - PullRequest
3 голосов
/ 21 мая 2009

Хотя я занимался проектами VBA в одном приложении для MS Access 2007 и Excel 2007, я не автоматизировал несколько приложений одновременно. Обобщенным проектом является открытие доступа, запуск некоторых запросов на обновление, которые добавляют данные в различные таблицы. Затем Excel должен получить данные. В Excel необходимы некоторые форматирующие изменения, такие как группировка, которая не меняет диапазон дат автоматически. Наконец, я планирую создать его таким образом, чтобы файл Excel автоматически отправлялся по электронной почте.

В некоторых частях этого ясно, как это сделать, например, Excel будет получать данные по ODBC из Access. Но где должен жить мастер VBA? Я мог бы иметь в Access кнопку, которая запускает Access VBA, но стоит ли запускать Access VBA для манипулирования Excel? Это затрудняет отладку?

Ответы [ 6 ]

3 голосов
/ 22 мая 2009

Чтобы начать работу с Access, добавьте ссылку на библиотеку объектов Excel. Затем используйте обозреватель объектов, чтобы ознакомиться с тем, как выглядит иерархия объектов Excel из Access. Это будет несколько отличаться, потому что объект верхнего уровня в коде Excel является неявным (как и в Access), и на него нужно явно ссылаться при кодировании в Access.

В Руководстве для разработчиков Access есть отличные главы по автоматизации остальной части Office из Access.

И наконец, лучше всего, если вы закодировали, используя ссылку на библиотеку автоматизации другого приложения, чтобы помочь вам в программировании, вы хотите переключиться на позднее связывание, чтобы вы могли удалить ссылку. Это означает, что не нужно использовать какие-либо конкретные типы данных внешней библиотеки (в основном вы используете переменные простого объекта) и не использовать ни одну из констант, определенных во внешней библиотеке. Мой производственный код с поздним связыванием обычно включает закомментированную версию с ранним связыванием, а также версию с поздним связыванием.

1 голос
/ 06 декабря 2012

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

Если вы обнаружите, что код автоматизации выполняется слишком медленно, вы можете разделить код, чтобы Access выполнялся функциями в Access, а Excel - функциями в Excel, а мастер-код просто запускает подпрограммы в обоих случаях. В этом случае вы можете поместить мастер-код в любое удобное для пользователя место для запуска. Я использовал C, Access, Word и Excel, и то, где вы положили кнопку запуска, не имеет большого значения, если весь код находится где-то еще.

Если ваши пользователи или сопровождающие больше знакомы с одним приложением, вы можете разместить там свой основной или главный код, но чаще я нахожу, что основной или главный код лучше размещать вместе с внутренностями приложения, поэтому что у меня вообще не может быть кода в другом партнере.

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

Для извлечения данных из Access даже не требуется объект приложения Access - будет работать объект DAO, ADO или ODBC (или даже DDE), что будет намного быстрее, намного надежнее, намного проще, намного лучше, чем открывать оба приложения и автоматизировать одно из другого.

Если вы запускаете из Access, похоже, что для этого проекта потребуется объект автоматизации Excel. Теперь это работает хорошо, но все еще намного медленнее и более хрупко, делая это только с помощью Excel и объекта DAO.

1 голос
/ 22 мая 2009

Сделайте всю работу в Access VBA. См. Следующие URL-адреса для некоторого примера кода

Модули: образец Excel Automation

Модули: перенос записей в Excel с автоматизацией

Также обратите внимание, что если вы имеете дело с несколькими версиями Excel, позднее связывание становится необходимостью. Позднее связывание означает, что вы можете безопасно удалить ссылку и иметь ошибку только тогда, когда приложение выполняет соответствующие строки кода. Вместо того, чтобы делать ошибки при запуске приложения и вообще не допускать пользователей в приложение. Или при нажатии на среднюю, левую или триммерную функцию.

Это также очень полезно, если вы не знаете, какая версия внешнего приложения будет находиться в целевой системе. Или если ваша организация находится в процессе перехода от одной версии к другой.

Дополнительные сведения, включая дополнительный текст и некоторые подробные ссылки, см. На странице Позднее связывание в Microsoft Access .

Что касается электронной почты, в FAQ по электронной почте Microsoft Access

есть несколько опций
1 голос
/ 22 мая 2009

Недавно я сделал что-то очень похожее на это и обнаружил, что могу выводить HTML со встроенным CSS для форматирования, которое загружается в Excel. Я использовал Access, чтобы позволить пользователям создавать свои необходимые выходные данные, открывая Excel только для отображения результатов. Вы можете обнаружить, что вывод в формате HTML делает ваши письма более привлекательными.

1 голос
/ 22 мая 2009

Я думаю, что вы ищете ключевые слова "Microsoft Office Office Automation".

Создайте приложение на вашем любимом языке программирования, поддерживающем интерфейс COM, а затем используйте автоматизацию для выполнения манипуляций в различных офисных приложениях.

Смотрите здесь c # Как получить доступ к ячейке Excel? и здесь Как прочитать данные файла Excel с помощью c #? и Google.

0 голосов
/ 22 мая 2009

Я давно не занимался VBA, хотя Access был моей точкой входа в мир программирования. Переход с Access 97 на Visual Basic был легким, и я помню, что написал много вещей, используя Access, больше похожий на VB-форму для выполнения множества задач (не обязательно для базы данных).

Это причина, по которой я думаю, что вы должны придерживаться Access и оттуда, с помощью VBA, делать свои вещи в Excel и т. Д.

Удачи

...