Как пропустить макрос Autoexec при открытии MSAccess из MSAccess?

Итак, у меня есть MSAccess MDB, который должен открывать другие MDB и запускать набор кода, который будет сравнивать два Access MDB, чтобы найти различия в коде, различия в запросах и т. Д. Цель состоит в том, чтобы проверить любой производственный MDB, который не был изменен по сравнению с первоначальным развертыванием.

Моя проблема в том, что многие из этих приложений Access имеют макросы Autoexec, и нет простого способа вызвать.OpenCurrentDatabase без запуска макроса autoexec.

Как я могу просто пропустить макрос, используя CODE?

Я знаю, что могу удерживать клавишу Shift. Я знаю, что могу включить и выключить эту опцию тоже.

5 ответов

Это хитрое решение, но оно работает для меня.

Я делаю DoCmd.DatabaseTransfer acImport Autoexec макроса. Затем я заменяю autoexec на пустой, используя DoCmd.DatabaseTransfer acExport.

Хитрость в том, что экспорт перезапишет

DoCmd.TransferDatabase acImport, "Microsoft Access", sSourcePath, acMacro, "autoexec", "autoexecSource"

DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecblank", "autoexec"

Я делаю это снова для второго MDB

DoCmd.TransferDatabase acImport, "Microsoft Access", sDestPath, acMacro, "autoexec", "autoexecDest"

DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPath, acMacro, "autoexecblank", "autoexec"

Затем я могу сделать все сравнения для нахождения различий между двумя MDB без запуска макросов autoexec, так как я импортировал их и заменил их

Затем я сравниваю два импортированных макроса и затем экспортирую их обратно в базы данных.

DoCmd.TransferDatabase acExport, "Microsoft Access", sSourcePath, acMacro, "autoexecSource", "autoexec"

DoCmd.TransferDatabase acExport, "Microsoft Access", sDestPath, acMacro, "autoexecDest", "autoexec"

Очевидно, что это решение работает только с использованием VBA в Access, но оно работает.

Надеюсь, это кому-нибудь поможет.

Код, запускаемый при запуске, может быть не в макросе autoexec, он может быть в форме запуска, поэтому вы можете рассмотреть возможность "программного нажатия клавиши Shift" через API:

http://www.mvps.org/access/api/api0068.htm

Другой вариант, если у вас есть доступ для редактирования макросов AutoExec открываемых вами баз данных: установите условие для каждого шага в макросе, которое указывает [Application].[UserControl], Если указать это, шаг макроса будет выполняться только в том случае, если пользователь открыл базу данных, а не через автоматизацию. Если для шага макроса уже установлено условие, вы можете просто заключить его в скобки: (old condition) AND [Application].[UserControl],

Если у вас нет возможности изменить эти макросы, возможно, вам лучше воспользоваться решением @ChuckB.

Другой вариант: переименуйте макрос autoexec в вашем VB-коде.

OpenCurrentDatabase ("Ваша база данных")

DoCmd. Переименуйте "Autoexec", acMacro, "tmp_Autoexec"

CloseCurrentDatabase

После того, как вы выполнили свое действие, снова переименуйте его в autoexec... et voila....

Это старый вопрос, но другой способ сделать это - использовать аргумент командной строки /cmd и использовать оператор COMMAND при запуске приложения для условного запуска подпрограмм запуска в зависимости от того, был ли предоставлен аргумент /cmd. Это будет работать только при запуске из командной строки, но не через автоматизацию.

Другие вопросы по тегам