Я хотел бы автоматизировать процесс защиты текстового документа для комментариев только с помощью документа Office 2007. VBA's Document.Protect. Это прекрасно работает, если документ еще не защищен, но не работает, как только защита была ранее установлена.VBA Document.Protect not setting wdProtectionType (Office 2007)
Ниже приведен минимальный рабочий пример, показывающий ошибку, с которой я сталкиваюсь (см. Ниже). Я воспроизведен на другом ПК с пакетом обновления 3 (SP3) для Office 2007. Проблема возникает даже при использовании пустого документа.
Для воспроизведения используйте следующий макрос после сохранения нового документа:
Sub ProtectionBugOffice2007()
' Apply a first type of locking to simulate an existing lock
RecentFiles(1).Open
If ActiveDocument.ProtectionType <> wdNoProtection Then ActiveDocument.Unprotect
ActiveDocument.Protect wdAllowOnlyFormFields
ActiveDocument.Close (wdSaveChanges)
' Now do the real test: Lock with our intended protection type
RecentFiles(1).Open
ActiveDocument.Unprotect
ActiveDocument.Protect wdAllowOnlyComments
ActiveDocument.Close (wdSaveChanges)
' Validate!
RecentFiles(1).Open
If ActiveDocument.ProtectionType = wdAllowOnlyComments Then
MsgBox "Success!"
Else
MsgBox "Failure! Should be " & wdAllowOnlyComments & " but is " & ActiveDocument.ProtectionType
End If
ActiveDocument.Close
End Sub
Things исследованные перед:
- Office 2007 до настоящего времени с SP 3 и последние окна обновления
- Если выполненный вручную тип защиты может быть изменен правильно, но записан как макрос, сбой.
- Другие виды сохранения документа (Document.Save или Document.SaveAs (2))
- Отключение ReadingLayout
ActiveWindow.View.ReadingLayout = False
(см ответ Alredo в): Никаких изменений в офисе 2007
правок:
- 2015-10-23: начальная проблема
- 2015-10-25: Добавлен минимальный рабочий пример.
- 2015-10-25: Обнаружено, что только после ручной или программной настройки типа защиты его больше нельзя изменять.
- 2015-10-26: Предлагаемая Баунти
я сделал несколько чтений, чтобы проверить функцию защиты, но вы, кажется, делает это хорошо ... И ваш код отлично работает для меня ... Я бы предположил, что вы использовали объект для лучшего контроля над ссылками, поскольку «ActiveDocument» может легко изменяться во время выполнения. – R3uK
Спасибо за вашу помощь! Это работает для вас? В какой версии Office? –
2010 64bit, работает как шарм ... И когда я повторил на защищенном документе и получил сообщение об ошибке, говорящее, что это невозможно, поэтому я не могу понять, где может быть ваша проблема ... – R3uK