как программно проверить защиту по текстовому документу vbscript - PullRequest
1 голос
/ 15 сентября 2011

Я использую vbscript, чтобы программно запустить список документов Word, открыть каждый, изменить его, а затем сохранить его, используя ms word 2010. Моя проблема в том, что в списке есть защищенные и незащищенные документы. Когда я достигаю защищенного документа, я получаю эту ошибку: этот метод или свойство недоступны, поскольку объект ссылается на защищенную область документа.

Итак, я провел небольшое исследование и нашел этот код на сайте MS:

If objDoc.ProtectionType <> wdNoProtection Then
                objDoc.Unprotect
End if

Теперь проблема в новой ошибке: метод или свойство незащищенной защиты недоступны, так как документ уже незащищен. Есть ли другой способ проверить, является ли документ защищенным или незащищенным, если вы знаете, что в списке будут оба документа, чтобы избежать ошибок?

1 Ответ

4 голосов
/ 15 сентября 2011

Если вы автоматизируете приложения MS Office с помощью VBScript (и используете пример кода VBA в качестве отправной точки), вы можете упустить необходимость определения констант wd *, xl * или ad (?) *, Которые предварительно определены в VBA, но отсутствует в VBScript. Используйте выходные данные Docs и / или Debug для добавления строк, таких как:

Const wdNoProtection = <correct value>

к вашему сценарию.

Если вы запустите свой сценарий с Option Explicit и либо полностью избежите злого глобального On Error Resume Next, либо по крайней мере отключите его, пока программа не протестирована, вы не пропустите ни одного из этих зверей.

Еще лучший подход - написать скрипт в виде файла .wsf. Тег <reference> включает в себя определения (поэтому вы не можете быть обвинены в неправильной строке Const).

POC / Демо-код:

<?xml version="1.0" standalone="yes" encoding="iso-8859-1" ?>
<package>
 <job id="QEC">
  <reference object="Excel.Sheet" reference="true"/>
  <script language="VBScript">
   <![CDATA[
' ############################################################################
  a = inputbox ( "Name of an Excel Constant?" )
  msgbox a & " = " & eval(a)
' ############################################################################
   ]]>
  </script>
 </job>
</package>
...