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