Много действий надо сделать, поэтому часто люди заполняют руками. К тому же нужно придумать по какому событию будет производиться расчёт (или вызывать макрос из вкладки "Вид"; автоматический расчёт делают формулы в Excel).
- Включить в настройках вкладку "Разработчик", Режим конструктора, добавить Элементы управления (на картинке в красной рамке). Рекомендую через свойства полей указать ТЕГИ (например,
dateProd
, dateExp
), и следить, чтобы не было разных полей с одинаковым тегом. Отключить Режим конструктора.
- Открыть редактор VBA (первая кнопка во вкладке "Разработчик").
- Создать модуль в документе. Написать функцию расчёта значения (для примера нужно прибавить 7 дней):
Sub ShelfLife()
'3456789012345678901234567890123456h8nor@ya567890123456789012345678toster56789
Dim objCC As ContentControl, counter As Variant
Dim dateProdIndex As Byte, dateExpIndex As Byte
With ActiveDocument
For Each objCC In .ContentControls
counter = counter + 1
Select Case objCC.Tag
Case "dateProd": dateProdIndex = counter
Case "dateExp": dateExpIndex = counter
End Select
Next objCC: Set objCC = .ContentControls(dateProdIndex)
If .ContentControls(dateExpIndex).LockContents _
Xor objCC.PlaceholderText = objCC.Range.Text Then counter = 0
If dateProdIndex > 0 And dateExpIndex > 0 And counter > 0 Then
counter = CDbl(CDate(objCC.Range.Text)) + 7
.ContentControls(dateExpIndex).Range.Text = CDate(counter)
Else
MsgBox "Поле с тегом dateProd или dateExp не заполнено. " & vbCrLf _
& "Или содержимое поля dateExp нельзя редактировать. ", vbExclamation
End If
End With
End Sub
Защита ограничения редактирования для внесения изменений в документ должна быть отключена. Можно использовать другие методы для
выбора поля: по названию или тегу.