Сохранение файла только после нажатия кнопки "Сохранить"

Автор Посетитель 04.04.2024, 04 апреля 2024, 16:21

Посетитель 04.04.2024

Есть макрос. В принципе все работает, но есть нюанс.
Этот макрос по умолчанию сохраняет файл в указанное место, а когда выбираешь другой путь, то в D:/Документы он остается.
Можно поправить код так, чтобы файл не сохранялся до тех пор, пока в диалоговом окне не будет нажата кнопка "Сохранить"?

Спойлер
Sub ЛС()
    ' Включение режима разметки страницы и переход в конец документа

    ActiveWindow.ActivePane.View.Type = wdPrintView
    Selection.EndKey Unit:=wdStory
    Selection.TypeParagraph
    Selection.TypeText Text:="Исп. Иванов И.И., 7-42-64"
    Selection.EndKey Unit:=wdStory
    Selection.TypeParagraph
    Selection.TypeText Text:=Format(Now(), "dd/mm/yyyy")
 
  'Изменение шрифра и цвета для исполнителя и даты
 
    Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
    Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
    Selection.Font.Size = 14
    Selection.Font.Color = wdColorAutomatic
    Selection.EndKey Unit:=wdStory
 
    Dim Таблица As Table
    Dim i As Long
 
 
  ' Создание ссылки на вторую таблицу.
    Set Таблица = ActiveDocument.Tables(2)
 
  ' Удаление строк в таблице
    For i = Таблица.Rows.Count To 2 Step -1
        If Таблица.Cell(i, 4).Range.Text <> "Согласовано без замечаний " & Chr(13) & Chr(7) Then
            Таблица.Rows(i).Delete
        End If
    Next i

    'Сохранение файла в формате "ЛС сформирован ДД.ММ.ГГГГ в ЧЧ.ММ"
         
    ActiveDocument.SaveAs FileName:="ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM") & ".docx", FileFormat:=wdFormatXMLDocument
 
  'Изменение размещения папки, куда файл должен сохраняться по умолчанию
 
    ChangeFileOpenDirectory "D:\Документы\"
    Dialogs(wdDialogFileSaveAs).Show

End Sub
[свернуть]

P.S. Не знаю как завернуть текст в "Код". Нашел только вариант со спойлером

Администратор

Вам надо оставить в коде только то, что связано с вопросом.
Сохранение ведь не связано с удалением строк в таблице?
Удалите из кода всё, что не связано с вопросом, и снова выложите код на форуме.

Посетитель 04.04.2024

Я для наглядности :)
Сократил код. Включение режима разметки оставил, так как не уверен, что он не влияет на сохранение

Sub ЛС()
    ' Включение режима разметки страницы и переход в конец документа

    ActiveWindow.ActivePane.View.Type = wdPrintView

    'Сохранение файла в формате "ЛС сформирован ДД.ММ.ГГГГ в ЧЧ.ММ"
           
    ActiveDocument.SaveAs FileName:="ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM") & ".docx", FileFormat:=wdFormatXMLDocument
   
    'Изменение размещения папки, куда файл должен сохраняться по умолчанию
   
    ChangeFileOpenDirectory "D:\Документы\"
    Dialogs(wdDialogFileSaveAs).Show

End Sub

Администратор

Опишите, как вам хотелось бы, что сохранялся документ.
Например:
1) пользователь должен указать с помощью диалога папку и имя файла
2) макрос сам должен сохранить файл в нужном месте
3) или что-то другое

Просто словами опишите, без программного кода.

Посетитель 04.04.2024

1) Макрос открывает диалоговое окно сохранения документа по умолчанию в D:\Документы\, в поле "Имя файла:" вводит имя в формате "ЛС сформирован ДД.ММ.ГГГГ в ЧЧ.ММ"
2) Сам документ физически на диске еще не сохраняет, а ждет действий пользователя
3) Пользователь указывает другой путь и жмет "Сохранить" и файл сохраняется в указанной пользователем папке

Администратор

Sub Macro()
   
    Dim Fn As String
   
   
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Сохранить как"
        .InitialFileName = "D:\Документы\ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM")
        If .Show = False Then
            Exit Sub
        End If
        Fn = .SelectedItems(1)
    End With
   
    ActiveDocument.SaveAs FileName:=Fn, FileFormat:=wdFormatXMLDocument
   
End Sub

Посетитель 04.04.2024

Спасибо. Вот теперь я счастлив в полной мере :)

Администратор

Можно упростить макрос, убрав переменную Fn, если она больше нигде не будет использоваться:

Sub Macro()
 
    With Application.FileDialog(msoFileDialogSaveAs)
        .Title = "Сохранить как"
        .InitialFileName = "D:\Документы\ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM")
        If .Show = False Then
            Exit Sub
        End If
        ActiveDocument.SaveAs FileName:=.SelectedItems(1), FileFormat:=wdFormatXMLDocument
    End With
 
End Sub

Посетитель 04.04.2024


Администратор

Переменная нужна для разных целей. Одно из назначений переменной, чтобы использовать данные несколько раз в коде.

Посетитель 04.04.2024

Можно для бестолковых на пальцах, пожалуйста. Мои познания в макросах очень скромны. Я обычно пишу макрорекордером, а потом правлю, постоянно экспериментируя

Администратор

В будущем, если будете часто писать макросы, сами поймёте, что такое переменная и зачем она нужна.
Мимо них вы не пройдёте, если будет писать макросы. Лучше их понять на практике, чем словесно описывать ситуацию.
Программирование нужно изучать на практике, а теорию уже читать на ночь перед сном.

Посетитель 04.04.2024