powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выполнение определенных действий при сохранении файла под другим именем
3 сообщений из 3, страница 1 из 1
Выполнение определенных действий при сохранении файла под другим именем
    #37188001
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ситуация такая. Есть некий Excel-файл с набором неких макросов и связей, у файла расширение ".svd", но не в этом суть.
Необходимо, чтобы при сохранении файла под другим именем выполнялись некие действия. А если просто сохранение, то ничего не происходило, файл просто сохранялся как есть.

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

Я написал такой код.
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
 Cancel = False

 If LCase(Right(ThisWorkbook.name,  4 )) <> ".svd" Then
  Call Разорвать_связи
 End If

End Sub

Проблема в том, что при первом сохранении с помощью "Сохранить как" данный макрос ещё заранее не знает новое имя файла которое ввёл пользователь. По этой причине при первом сохранении ничего не происходит. Приходиться делать второе сохранение уже через "Сохранить" и только тогда разрываются связи.
Проблему можно было бы решить, если бы заранее до момента сохранения знать имя файла, которое ввел пользователь.
Конечно можно было бы использовать ещё значение переменой SaveAsUI, если оно True, то значит пользователь выполнил операцию "Сохранить как" и не проверяя имени разорвать связи. Но проблема в том, что пользователь может при этом и не поменять имя файла и тогда будет испорчен оригинальный файл.


Что касается удаления кода, то тут тоже есть проблема. Тот макрос работает только если у пользователя стоит галочкой «Доверять доступ к Visual Basic Project».
По идее эти две проблемы можно было бы решить, если в момент операции "Сохранить как", знать новое имя и путь к файлу, который указал пользователь. Тогда можно было бы макросом сначала разорвать связи, а затем перенести все листы в новый файл и новый файл сохранить под тем именем, который указал пользователь.

Так что все спотыкается на то, как узнать новое имя файла указанное пользователем при "Сохранение как" до того момента как файл сохранился.
...
Рейтинг: 0 / 0
Выполнение определенных действий при сохранении файла под другим именем
    #37188062
Фотография The_Prist
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Djon Player,

А вот такой вариант не подойдет?

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    If SaveAsUI =  0  Then Exit Sub
    Cancel = True
    Dim sNewName As String
    sNewName = Application.GetSaveAsFilename
    If sNewName = "False" Then Exit Sub    'пользователь отказался от сохранения файла.
    Call Разорвать_связи
    Me.SaveAs sNewName & "xlsx"    'сразу без макросов сохраняется(Только для 2007 Офиса и старше)
End Sub
...
Рейтинг: 0 / 0
Выполнение определенных действий при сохранении файла под другим именем
    #37188100
Djon Player
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо The_Prist, это то что нужно.
Именно код "sNewName = Application.GetSaveAsFilename" мне и нужен был.
О сохранение в формате xlsx я тоже думал и у них даже установлен Excel 2007, только вот я не уверен, что такой Excel есть у тех, кому они будут потом пересылать этот файл.
Видимо придется делать двойное пересохранение, сначала тот файл сохранить в формате xlsx, а затем в формате Excel 2003.
...
Рейтинг: 0 / 0
3 сообщений из 3, страница 1 из 1
Форумы / Microsoft Office [игнор отключен] [закрыт для гостей] / Выполнение определенных действий при сохранении файла под другим именем
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]