Глюк CustomDocumentProperties (Word 2003,VBA)
Добавлено: 10 авг 2008, 23:49
Есть у меня в документах специальное свойство !DSP. Есть мой VBA AddIN который выводит
для пользователя UserForm и на основании действий пользователя это свойство модифицирует.
Причём искомый документ (шаблон) в это время открыт в режиме редактирования надстройки.
Т.е для шаблона xxx.dot запускается
winword /q /l xxx.dot
пути я для простоты опускаю.
Мой макрос отрабатывает. Я захожу в Файл-> Cвойства->Прочие: !DSP и вижу правильно
изменённое значение свойства.
Значение в коде устанавливалось с помощью конструкции
Cохраняем шаблон Файл->Сохранить (можно и Cохранить как)
Открываем файл заново. И ....обнаруживаем что свойство !DSP НЕ ИЗМЕНИЛОСЬ !
Более того. Вместо изменения значения можно удалить это свойство методом .delete а затем
создать заново с новым значением методом .add. В этом случае вы обнаружите в файле свойство !DSP cо значением vbNullString.
Расследование показало, что для того что бы новое значение свойства сохранилось в файле
необходима модификация самого текста документа.
Т.е достаточно, скажем, в конце документа вставить и удалить пробел и пользовательское свойство отлично сохраняется.
Нет слов.
для пользователя UserForm и на основании действий пользователя это свойство модифицирует.
Причём искомый документ (шаблон) в это время открыт в режиме редактирования надстройки.
Т.е для шаблона xxx.dot запускается
winword /q /l xxx.dot
пути я для простоты опускаю.
Мой макрос отрабатывает. Я захожу в Файл-> Cвойства->Прочие: !DSP и вижу правильно
изменённое значение свойства.
Значение в коде устанавливалось с помощью конструкции
Код: Выделить всё
[B]' Н Е Р А Б О Т А Е Т ![/B]
ActiveDocument.CustomDocumentProperties("!DSP").Value = NewValue
Открываем файл заново. И ....обнаруживаем что свойство !DSP НЕ ИЗМЕНИЛОСЬ !
Более того. Вместо изменения значения можно удалить это свойство методом .delete а затем
создать заново с новым значением методом .add. В этом случае вы обнаружите в файле свойство !DSP cо значением vbNullString.

Код: Выделить всё
[B]' Н Е Р А Б О Т А Е Т ![/B]
ActiveDocument.CustomDocumentProperties("!DSP").Delete
ActiveDocument.CustomDocumentProperties.Add Name:="!DSP", LinkToContent:=False, _
Value:=NewValue, Type:=msoPropertyTypeString
необходима модификация самого текста документа.
Т.е достаточно, скажем, в конце документа вставить и удалить пробел и пользовательское свойство отлично сохраняется.

Код: Выделить всё
' Р А Б О Т А Е Т !
ActiveDocument.CustomDocumentProperties("!DSP").Value = NewValue
With Selection
.EndKey Unit:=wdStory
.TypeText Text:="_"
.TypeBackspace
.HomeKey Unit:=wdStory
End With
Нет слов.