Есть макрос. В принципе все работает, но есть нюанс.
Этот макрос по умолчанию сохраняет файл в указанное место, а когда выбираешь другой путь, то в 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. Не знаю как завернуть текст в "Код". Нашел только вариант со спойлером
Вам надо оставить в коде только то, что связано с вопросом.
Сохранение ведь не связано с удалением строк в таблице?
Удалите из кода всё, что не связано с вопросом, и снова выложите код на форуме.
Я для наглядности :)
Сократил код. Включение режима разметки оставил, так как не уверен, что он не влияет на сохранение
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) или что-то другое
Просто словами опишите, без программного кода.
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
Спасибо. Вот теперь я счастлив в полной мере :)
Можно упростить макрос, убрав переменную 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
Простите, а что дает переменная Fn?
Переменная нужна для разных целей. Одно из назначений переменной, чтобы использовать данные несколько раз в коде.
Можно для бестолковых на пальцах, пожалуйста. Мои познания в макросах очень скромны. Я обычно пишу макрорекордером, а потом правлю, постоянно экспериментируя
В будущем, если будете часто писать макросы, сами поймёте, что такое переменная и зачем она нужна.
Мимо них вы не пройдёте, если будет писать макросы. Лучше их понять на практике, чем словесно описывать ситуацию.
Программирование нужно изучать на практике, а теорию уже читать на ночь перед сном.
Принял к сведению