Как сделать так, чтобы при запуске макроса выскочило предложение сохранить документ в текущей папке?
Под текущей папкой я понимаю папку, в которой находится активный файл.
То есть макрос должен сделать действия, аналогичные этим. Юзер запускает макрос - появляется диалоговое окно "Сохранение документа", в этом диалоге должна быть открыта текущая папка.
Чтобы в диалоге "Сохранение файла" отобразилась нужная папка, используйте параметр "InitialFileName" и на конце ставьте левый слеш.
Если в параметре "InitialFileName" на конце указать имя файла, то в диалог будет вставлено это имя.
Способ 1. Использование диалога "Сохранение файла" и метода "SaveAs".
Этот способен удобен, чтобы обработать ситуацию, если файл может существовать.
Sub Макрос()
Dim FN As String
' Запуск диалога "Сохранение файла".
With Application.FileDialog(msoFileDialogSaveAs)
' Настраиваем, чтобы в диалоге была открыта нужная папка.
.InitialFileName = ActiveDocument.Path & "\"
' Если юзер щёлкнул "Отмена" или закрыл диалог крестиком.
If .Show = 0 Then
Exit Sub
End If
' Запись в переменную полного имени (путь + имя) файла, который надо сохранить.
FN = .SelectedItems(1)
End With
' Сохранение файла.
ActiveDocument.SaveAs FileName:=FN, FileFormat:=wdFormatXMLDocument
End Sub
PS. В новых версиях экселя метод "SaveAs" скрыт, а вместо него предлагают использовать "SaveAs2".
Но в новых версиях экселя метод "SaveAs" работает.
Способ 2. Использование только диалога "Сохранение файла".
Этот способ аналогичен диалогу, как в программе "Word".
Sub Макрос()
' Запуск диалога "Сохранение файла".
With Application.FileDialog(msoFileDialogSaveAs)
' Настраиваем, чтобы в диалоге была открыта нужная папка.
.InitialFileName = ActiveDocument.Path & "\"
' Если юзер щёлкнул "Отмена" или закрыл диалог крестиком.
If .Show = 0 Then
Exit Sub
End If
' Сохранение.
.Execute
End With
End Sub
Спасибо.
Для чего может пригодиться способ 1? Я разницы между двумя способами не заметил.
Используйте способ 2. Если вдруг способ 2 вам не подойдёт, то используйте способ 1.
Сейчас вы все возможные ситуации не представляете, поэтому используйте то, что работает в вашей задаче.
Способ 1 может, например, понадобится, если надо автоматически добавить порядковый номер к имени файла, если файл с таким именем существует. Способ 2 такой возможности не даёт; при этом способе юзер должен сам поставить порядковый номер вручную.
Возможно есть и другие ситуации - я все ситуации в данный момент не могу представить.