Не всегда нужно все изобретать самостоятельно, когда можно использовать то, что уже существует.

У вас есть доступ к большинству встроенных диалоговых окон Excel и других приложений Office.

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

Application.Dialogs(xlDialogSaveAs).Show

Чтобы получить список всех доступных диалогов в Excel, используйте обозреватель объектов.

Чтобы отобразить его, нажмите F2, когда у вас активирован модуль. Выберите Excel как библиотеку и найдите константы, начинающиеся с xlDialog …​.

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

Вместо этого методы возвращают полное имя файла в файл, который пользователь хочет открыть или сохранить.

FullFileName = Application.GetOpenFilename("Excel files (.xl),.xl", _

1, "Custom Dialog Title", , False)

FullFileName = Application.GetSaveAsFilename("DefaultFilename.xls", _

"Excel files (.xl),.xl", 1, "Custom Dialog Title")

Результат можно использовать как угодно. Позже вы можете открыть выбранную книгу следующим образом:

Workbooks.Open FullFileName

Или вы можете сохранить книгу так:

ActiveWorkbook.SaveAs FullFileName

Когда пользователь подтвердил диалог FileOpen или FileSaveAs, он / она также мог изменить активную или текущую папку, поэтому я часто использую эти два метода как простой подход, позволяющий пользователю выбрать папку. Вы можете найти другой способ позволить пользователю выбрать папку в разделе «Файлы и папки».