Невозможно сохранить файл .docm после присвоения значения определенному document.variable - PullRequest
0 голосов
/ 12 июня 2019

У меня есть файл с макросом, который изначально был создан как файл .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

1 Ответ

2 голосов
/ 12 июня 2019

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...