Альтернативой (которую я бы назвал вторым вариантом вызова API, рекомендованного @Tony Toews и @draice) было бы использование объекта Application.FileDialog. Это было частью библиотеки автоматизации Office до тех пор, пока VBA находился в Access, но в последних версиях Access (начиная с A2002 или A2003, я не знаю, какая) приложение верхнего уровня предоставляло обертка для этого объекта. Однако помните, что без ссылки на библиотеку автоматизации Office значения ENUM, отображаемые в Intellisense, не могут использоваться без ссылки (полезное сообщение об ошибке информирует вас об этом и предлагает создать ссылку). Короче говоря, если вы используете его, лучше использовать его так же, как и любой объект автоматизации с поздним связыванием, за исключением того, что вам не нужно инициализировать объект верхнего уровня с помощью Application.CreateObject, так как он уже есть для использования .
EDIT:
@ draice спрашивает:
Я не понимаю следующее
заявления, которые вы написали: «
Приложение доступа верхнего уровня имеет
предоставил обертку для этого объекта "
«Лучше всего использовать его так, как
объект автоматизации с поздним связыванием "
Код API Тони будет работать в каждой версии Windows, и поскольку MS верит в обратную совместимость, они никогда не прервут этот вызов API в будущих версиях Windows.
объект FileDialog не прост в использовании в VBA, если вы не добавите ссылку на библиотеку автоматизации Office. Лучше свести к минимуму количество ссылок в вашей базе данных Access, потому что их могут испортить всевозможные вещи и привести к поломке вашего приложения (любая пропущенная ссылка помешает запуску всего кода VBA). Чтобы избежать проблем с отсутствующими ссылками, мы используем позднюю привязку, чтобы код, который вы пишете, не зависел от внешней библиотеки.
Microsoft может удалить этот объект из будущих версий Access. Объект FileSearch представляет собой аналогичную ситуацию, поскольку он был представлен в A95 / 97 как часть библиотеки Office Automation, а затем в A2000 была создана оболочка вокруг него, но Microsoft удалила его в A2007 (и вообще не предоставила альтернативы) , MS может решить удалить объект FileDialog в будущих версиях Access, и тогда ваш код сломается. Но вызов API никогда не прервется.