Доброго времени суток.
Через макрорекордер, поиск в инете, далее методом проб и ошибок (не без помощи этого ресурса) написал такой код:
Код
Sub ЛС()
' Включение режима разметки страницы и переход в конец документа
ActiveWindow.ActivePane.View.Type = wdPrintView
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Selection.ParagraphFormat.SpaceBefore = 18
Selection.TypeText Text:="Исп. *****В.В., **-**-**" 'заменить на свои ФИО и телефон (в кавычках)
Selection.EndKey Unit:=wdStory
Selection.TypeParagraph
Selection.TypeText Text:=Format(Now(), "dd/mm/yyyy") 'вставка текущей даты
WordBasic.OpenOrCloseParaAbove
'Изменение шрифта и цвета для исполнителя и даты
Selection.MoveUp Unit:=wdLine, Count:=1, Extend:=wdExtend
Selection.HomeKey Unit:=wdLine, Extend:=wdExtend
Selection.Font.Size = 14
Selection.Font.Color = wdColorAutomatic
Selection.ParagraphFormat.Alignment = wdAlignParagraphLeft
Selection.Font.Name = "Times New Roman"
Selection.EndKey Unit:=wdStory
Dim Таблица As Table
Dim i As Long
' Удаление строк во второй таблице, не затрагивая пустые, если в документе есть две и более таблицы.
' В документе может не быть таблиц.
If ActiveDocument.Tables.Count >= 2 Then
Selection.MoveUp Count:=1
Selection.HomeKey
Selection.TypeBackspace
Set Таблица = ActiveDocument.Tables(2)
For i = Таблица.Rows.Count To 2 Step -1
If Таблица.Cell(i, 4).Range.Text = Chr(13) & Chr(7) Then
ElseIf Таблица.Cell(i, 4).Range.Text <> "Согласовано без замечаний " & Chr(13) & Chr(7) Then
Таблица.Rows(i).Delete
End If
Next i
End If
'Сохранение файла в формате "ЛС сформирован ДД.ММ.ГГГГ в ЧЧ.ММ"
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
В принципе, все чудесно, но есть проблемка. Макрос по умолчанию открывает окно "Сохранить как..." и, если нажать "Отмена", выполнить какие-то операции и снова нажать "Сохранить как...", то строка ".InitialFileName = "D:\Документы\ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM")" не выполнится, а хотелось бы, чтобы это условие выполнялось для всех документов, где в тексте есть словосочетание "Лист согласования" при выборе "Сохранить как..." или просто при закрытии документа.
То есть перед сохранением или закрытием макрос должен проверить текст и, если есть слова "Лист согласования", выполнить присвоение файлу указанного выше имени.
Я самостоятельно к этому прийти не смог и буду крайне признателен, если кто-нибудь мне в этом поможет.
Заранее спасибо
Я не смог понять вашу мысль.
У вас есть макрос, при чём здесь сохранение и закрытие документа? У вас проблема с макросом или с чем-то другим?
У вас вопрос по вашему макросу или по чему-то другому?
Здравствуйте.
Макрос нужно дописать в части алгоритма сохранения.
Сейчас он при запуске после редактирования открывает окно сохранения файла и присваивает файлу определенное имя. Но если в окне сохранения нажать "Отмена", после чего снова "Сохранить как...", то файлу имя уже не присвоится. А надо, чтобы присваивалось
Цитата:
Но если в окне сохранения нажать "Отмена", после чего снова "Сохранить как...", то файлу имя уже не присвоится.
Подцитата:
после чего снова "Сохранить как..."
Пользователь запускает макрос, появляется диалог "Сохранить как", в диалоге правильно отображается полное имя. Пользователь нажимает Отмена.
Пользователь второй раз запускает макрос, появляется диалог "Сохранить как", но в диалоге уже неправильно отображается полное имя.
Правильно я понял ситуацию?
Нет
1. Пользователь запустил макрос
2. Открылось окно "Сохранить как..."
3. Пользователь нажал "Отмена"
4. Пользователь нажал "Сохранить как..."
6. По событию запустился макрос, который проверил текст документа и, если в тексте находит словосочетание "Лист согласования", то выполняет команду InitialFileName = "D:\Документы\ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM", т.е. присваивает документу имя с текущей датой и временем.
Сейчас первая задача: запустить макрос, когда пользователь нажимает стандартную кнопку "Сохранить как"?
Есть ещё кнопка "Сохранить". Поэтому нужно ещё уточнение, какую именно кнопку пользователь будет нажимать.
Если нажать кнопку "Отмена" в диалоговом окне "Сохранить как..." (который открыт макросом), то файлу по умолчанию присвоится имя, сформированное системой, из которой файл выгружается в формате 20241003_154828.htm и сохраняется в папке по умолчанию (D:\Документы\SAP\SAP GUI).
Поэтому независимо от действий пользователя - нажмет ли он "Сохранить как...", "Сохранить" или просто закроет файл, должно открыться окно сохранения файла с выполнением InitialFileName = "D:\Документы\ЛС сформирован " & Format(Date, "DD.MM.YYYY") & " в " & Format(Time, "HH.MM
Для Excel я бы воспользовался Private Sub Workbook_BeforeClose(Cancel As Boolean) и прочими "BeforeSave", а вот как это сделать в Word - не нашел