@skakal

Как сделать автоматический расчет даты в MS Word?

Добрый день.
Помогите решить проблему.

Есть документ, шаблон этикетки.
В нем строчки

Изготовлено : 20.02.2020
Годен до: 20.02.2020


Как сделать так, что бы пользователь мог выбрать дату изготовления, а годен до подставлялась автоматически?

Всю голову сломал, а гугл меня походе забанил. :)
  • Вопрос задан
  • 1340 просмотров
Пригласить эксперта
Ответы на вопрос 2
honor8
@honor8
Принципы быстродействия VBA в описании
Много действий надо сделать, поэтому часто люди заполняют руками. К тому же нужно придумать по какому событию будет производиться расчёт (или вызывать макрос из вкладки "Вид"; автоматический расчёт делают формулы в Excel).
  1. Включить в настройках вкладку "Разработчик", Режим конструктора, добавить Элементы управления (на картинке в красной рамке). Рекомендую через свойства полей указать ТЕГИ (например, dateProd, dateExp), и следить, чтобы не было разных полей с одинаковым тегом. Отключить Режим конструктора.
  2. Открыть редактор VBA (первая кнопка во вкладке "Разработчик").
  3. Создать модуль в документе. Написать функцию расчёта значения (для примера нужно прибавить 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
Защита ограничения редактирования для внесения изменений в документ должна быть отключена. Можно использовать другие методы для выбора поля: по названию или тегу.
Ответ написан
Комментировать
NeiroNx
@NeiroNx
Программист
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы