Не удается сохранить файл .docm после присвоения значения определенному документу.переменная

У меня есть файл с макросом, который изначально был создан как файл .doc. Если я попытаюсь сохранить его как файл .docm или .dotm, он не сохранится. Нет сообщения об ошибке, но файл не сохраняется.

Если я удалю модуль; или сохраните его как файл .docx, он сохранится.

Если я

  • открыть файл .docx
  • импортировать или скопировать/вставить предыдущий макрос в обычный модуль
  • запустить макрос

опять же, его нельзя сохранить как .docm

Если я удалю модуль, я смогу сохранить его как .docm

Или, даже если макрос присутствует и был запущен, я могу сохранить его как файл .doc.

Таким образом, кажется, что в макросе может быть что-то, что после запуска создает файл, который нельзя сохранить как .docm, но все же можно сохранить как файл .doc.

Макрос проверяет некоторые пользовательские свойства документа, введенные вручную. Он вычисляет различные переменные документа, которые используются в полях по всему документу, а затем обновляет эти поля.

Используя точки останова, кажется, что когда код присваивает значение Document.Variable"sign", документ больше не может быть сохранен. Это поле даты, но в документе есть другие поля даты, которые не вызывают этой проблемы.

code.text для конкретных полей:

docvariable "sign" \@ "MMMM, yyyy" \*upper \* MERGEFORMAT 
docvariable "sign" \@ "d" \* OrdText \*upper\* MERGEFORMAT 

Код макроса (в обычном модуле):

Option Explicit

Sub Update()
    Dim prop As DocumentProperty
    Dim area As Double, rent As Double, start As Date, tend As Date, notice As Date, term As Long, Sign As Date
    Dim annual As Double, annualcents As Double, monthly As Double, monthlycents As Long
    Dim var As Variables

'get Document Properties
For Each prop In ThisDocument.CustomDocumentProperties
    If prop.Name = "area" Then area = prop.Value
    If prop.Name = "rent" Then rent = prop.Value
    If prop.Name = "start" Then start = Int(prop.Value)
    If prop.Name = "term" Then term = prop.Value
    If prop.Name = "sigDate" Then Sign = Int(prop.Value)
Next prop

    annual = area * rent
    annualcents = 100 * (annual - Int(annual))
    monthly = annual / 12
    monthlycents = 100 * (monthly - Int(monthly))
    tend = DateAdd("yyyy", term, start)
    tend = DateAdd("d", -1, tend)
    notice = DateAdd("m", -4, tend)

Set var = ThisDocument.Variables
    var("area").Value = area
    var("rent").Value = rent
    var("start").Value = start
    var("term").Value = term

    'if this line is not run or
    'if this document variable is deleted,
    'the file will save as expected
    var("sign").Value = Sign


    var("annual").Value = annual
    var("annualcents").Value = annualcents
    var("monthly").Value = monthly
    var("monthlycents").Value = monthlycents
    var("tend").Value = tend
    var("notice").Value = notice

ThisDocument.Fields.Update

End Sub
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
2 131
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Document.Variable "sign" используется Word для обозначения того, что к проекту кода применена действительная цифровая подпись.

Выберите другое имя для вашей переменной, например «sigDate».

Спасибо за решение. Я искал такие вещи, как «зарезервированные слова ms-word», и ничего не нашел. Я посмотрел Sign и обнаружил, что он указан как метод объекта Signature. Я изменил имя в списке CustomDocumentProperties, но никогда не менял его в списке Variables. Это сводит меня с ума уже много лет!

Ron Rosenfeld 12.06.2019 11:54

Другие вопросы по теме