Как пропустить Автоисполнительный макрос при открытии MSAccess from MSAccess?

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

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

Как я могу просто пропустить макрос с помощью КОДА?

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

9
задан ChuckB 11 March 2010 в 04:17
поделиться

4 ответа

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

Я выполняю 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, но оно действительно работает.

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

5
ответ дан 4 December 2019 в 13:47
поделиться

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

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

6
ответ дан 4 December 2019 в 13:47
поделиться

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

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

2
ответ дан 4 December 2019 в 13:47
поделиться

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

0
ответ дан 4 December 2019 в 13:47
поделиться
Другие вопросы по тегам:

Похожие вопросы: