Запрет на сохранение документа Word

Автор sashgera, 13 августа 2014, 23:10

sashgera

Здравствуйте.
Мне нужно запретить сохранение документа 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?

Администратор

sashgera, про работу с событиями в программе "Word" можете сначала почитать здесь: http://forumvba.ru/VBAHelp/WordEvents_Application/WordEvents_Application.htm

sashgera

Спасибо за ссылку, статью внимательно прочитал, но в ней не указано как запретить сохранение документа word. Тот код, который я привел выше, в word не работает.

Администратор

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

sashgera

Еще раз спасибо, разобрался и все получилось, документы word не сохраняются. Только вот не нужный msgbox Сохранить изменения...
Но я, наверное, не правильно задал вопрос, в статье описано как сделать событие программы word, а мне нужно событие файла:
чтобы в одном конкретном файле, не срабатывало сохранение, а при его закрытии (нажатие на крестик) - также закрывался без сохранения и без msgbox.
Может быть дадите ссылку на такую статью?

Администратор

sashgera, в программе "Word" нет события файла, которое относится к сохранению документа.
Все события файла можно так посмотреть:

  • перейдите в VBA;
  • в окне "Project - Имя проекта" найдите "Normal", а в "Normal" найдите "ThisDocument";
  • щёлкните два раза по "ThisDocument" - справа отобразится содержимое модуля "ThisDocument";
  • здесь и можно увидеть события файла. Для этого: в области кода, в левом выпадающем списке выберите "Document". Теперь в правом выпадающем списке Вы увидите все события файла.
У файла нет события, относящегося к сохранению, поэтому и нужно использовать события программы "Word".

Администратор

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

Администратор

А вот событие, относящиеся к закрытию файла, у Word-файла есть.
Поместите в VBA, в нужный файл, в модуль "ThisDocument" такую процедуру:

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

События файла работают сами по себе - не нужно делать процедуру, которая будет делать их рабочими, как в случае с событиями программы "Word".

sashgera

Спасибо за развернутый ответ, все получилось!