Форум по VBA, Excel и Word

Word => Макросы в Word => Тема начата: sashgera от 13 августа 2014, 23:10

Название: Запрет на сохранение документа Word
Отправлено: sashgera от 13 августа 2014, 23:10
Здравствуйте.
Мне нужно запретить сохранение документа word, в excel делал так:

Private Sub Workbook_BeforeClose(Cancel As Boolean)
    Me.Saved = True 'закрываем без сохранения
End Sub
Private Sub Workbook_BeforeSave(ByVal SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True 'отменяем сохранение
End Sub

И чтобы этот макрос сохранить, вводил в Immediate:
Application.EnableEvents = False

А как это можно сделать в word?
Название: Re: Запрет на сохранение документа Word
Отправлено: Администратор от 14 августа 2014, 14:29
sashgera, про работу с событиями в программе "Word" можете сначала почитать здесь: http://forumvba.ru/VBAHelp/WordEvents_Application/WordEvents_Application.htm
Название: Re: Запрет на сохранение документа Word
Отправлено: sashgera от 14 августа 2014, 21:06
Спасибо за ссылку, статью внимательно прочитал, но в ней не указано как запретить сохранение документа word. Тот код, который я привел выше, в word не работает.
Название: Re: Запрет на сохранение документа Word
Отправлено: Администратор от 14 августа 2014, 21:16
sashgera, вот этот код не позволяет сохранить файл: при нажатии кнопки "Сохранить" ничего не происходит.
Этот код должен находиться в модуле класса.

Private Sub myApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
End Sub


Примечание

Статья про то, как работать с событиями программы "Word": http://forumvba.ru/VBAHelp/WordEvents_Application/WordEvents_Application.htm
Название: Re: Запрет на сохранение документа Word
Отправлено: sashgera от 15 августа 2014, 02:37
Еще раз спасибо, разобрался и все получилось, документы word не сохраняются. Только вот не нужный msgbox Сохранить изменения...
Но я, наверное, не правильно задал вопрос, в статье описано как сделать событие программы word, а мне нужно событие файла:
чтобы в одном конкретном файле, не срабатывало сохранение, а при его закрытии (нажатие на крестик) - также закрывался без сохранения и без msgbox.
Может быть дадите ссылку на такую статью?
Название: Re: Запрет на сохранение документа Word
Отправлено: Администратор от 15 августа 2014, 08:20
sashgera, в программе "Word" нет события файла, которое относится к сохранению документа.
Все события файла можно так посмотреть:
У файла нет события, относящегося к сохранению, поэтому и нужно использовать события программы "Word".
Название: Re: Запрет на сохранение документа Word
Отправлено: Администратор от 15 августа 2014, 08:25
sashgera, чтобы не сохранялось в конкретном файле, нужно сделать такие действия. Обратите внимание, что у процедуры:

Private Sub myApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    Cancel = True
End Sub

есть аргумент "Doc". Этот аргумент представляет собой файл, который отображается на мониторе, когда пользователь нажимает кнопку "Сохранить". Прежде, чем использовать "Cancel = True", узнайте, какой файл отображается на мониторе. Например, так:

Private Sub myApp_DocumentBeforeSave(ByVal Doc As Document, SaveAsUI As Boolean, Cancel As Boolean)
    If Doc.Name = "имя файла" Then
        Cancel = True
    End If
End Sub
Название: Re: Запрет на сохранение документа Word
Отправлено: Администратор от 15 августа 2014, 08:34
А вот событие, относящиеся к закрытию файла, у Word-файла есть.
Поместите в VBA, в нужный файл, в модуль "ThisDocument" такую процедуру:

Private Sub Document_Close()
    Me.Saved = True
End Sub

События файла работают сами по себе - не нужно делать процедуру, которая будет делать их рабочими, как в случае с событиями программы "Word".
Название: Re: Запрет на сохранение документа Word
Отправлено: sashgera от 15 августа 2014, 13:03
Спасибо за развернутый ответ, все получилось!