Форум по VBA и MS Office

Word => Макросы в Word => Тема начата: Посетитель 04.04.2024 от 04 апреля 2024, 16:21

Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Посетитель 04.04.2024 от 04 апреля 2024, 16:21
Есть макрос. В принципе все работает, но есть нюанс.
Этот макрос по умолчанию сохраняет файл в указанное место, а когда выбираешь другой путь, то в 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 апреля 2024, 17:44
Вам надо оставить в коде только то, что связано с вопросом.
Сохранение ведь не связано с удалением строк в таблице?
Удалите из кода всё, что не связано с вопросом, и снова выложите код на форуме.
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Посетитель 04.04.2024 от 04 апреля 2024, 18:07
Я для наглядности :)
Сократил код. Включение режима разметки оставил, так как не уверен, что он не влияет на сохранение

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
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Администратор от 04 апреля 2024, 19:20
Опишите, как вам хотелось бы, что сохранялся документ.
Например:
1) пользователь должен указать с помощью диалога папку и имя файла
2) макрос сам должен сохранить файл в нужном месте
3) или что-то другое

Просто словами опишите, без программного кода.
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Посетитель 04.04.2024 от 05 апреля 2024, 10:59
1) Макрос открывает диалоговое окно сохранения документа по умолчанию в D:\Документы\, в поле "Имя файла:" вводит имя в формате "ЛС сформирован ДД.ММ.ГГГГ в ЧЧ.ММ"
2) Сам документ физически на диске еще не сохраняет, а ждет действий пользователя
3) Пользователь указывает другой путь и жмет "Сохранить" и файл сохраняется в указанной пользователем папке
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Администратор от 05 апреля 2024, 12:29
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 от 05 апреля 2024, 12:44
Спасибо. Вот теперь я счастлив в полной мере :)
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Администратор от 11 апреля 2024, 07:21
Можно упростить макрос, убрав переменную 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 от 11 апреля 2024, 09:24
Простите, а что дает переменная Fn?
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Администратор от 11 апреля 2024, 09:59
Переменная нужна для разных целей. Одно из назначений переменной, чтобы использовать данные несколько раз в коде.
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Посетитель 04.04.2024 от 11 апреля 2024, 10:03
Можно для бестолковых на пальцах, пожалуйста. Мои познания в макросах очень скромны. Я обычно пишу макрорекордером, а потом правлю, постоянно экспериментируя
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Администратор от 11 апреля 2024, 10:06
В будущем, если будете часто писать макросы, сами поймёте, что такое переменная и зачем она нужна.
Мимо них вы не пройдёте, если будет писать макросы. Лучше их понять на практике, чем словесно описывать ситуацию.
Программирование нужно изучать на практике, а теорию уже читать на ночь перед сном.
Название: Сохранение файла только после нажатия кнопки "Сохранить"
Отправлено: Посетитель 04.04.2024 от 11 апреля 2024, 10:25
Принял к сведению