Таким образом, у меня есть MDB MSAccess, который должен открыть другой MDB и выполнить набор кода, который сравнит два Доступа MDB, чтобы найти различия в коде, запросить diffs, и т.д. Так как цель состояла в том, чтобы проверить любое производство, MDB не был изменен от исходного развертывания.
Моя проблема состоит в том, что многие из этих приложений Доступа имеют Автоисполнительные макросы и нет никакого простого способа назвать.OpenCurrentDatabase, не выполняя автоисполнительный макрос.
Как я могу просто пропустить макрос с помощью КОДА?
Я знаю, что могу удержать клавишу Shift. Я знаю, что могу включить и выключить ту опцию также.
Это хитрое решение, но оно работает для меня.
Я выполняю 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:
Еще один вариант, если у вас есть доступ к редактированию макросов AutoExec баз данных, которые вы открываете: установите условие на каждом шаге в макросе, который указывает [Приложение].[UserControl]
. При указании этого шаг макроса будет выполняться только в том случае, если база данных открыта пользователем, а не с помощью автоматизации. Если для шага макроса уже задано условие, вы можете просто заключить его в круглые скобки: (старое условие) И [Приложение].[UserControl]
.
Однако, если у вас нет возможности изменить эти макросы, возможно, вам лучше воспользоваться решением @ChuckB.
Это старый вопрос, но другой способ сделать это — использовать аргумент командной строки /cmd и использовать оператор COMMAND при запуске приложения для условного запуска процедур запуска в зависимости от того, был ли предоставлен аргумент /cmd. Однако это будет работать только при запуске из командной строки, а не через автоматизацию.