В отчете от процесса в таблице со списком статусов процесса необходимо добавить столбец, который будет иметь дату бОльшую на год от даты "Дата изменения статуса" в одноименном столбце. Название этого столбца "Срок деятельности". Формат даты представлен как "дд.мм.гг".
Решение описывается с момента, когда в шаблоне отчета создана необходимая привязка типа "Список".
В шаблоне к необходимой таблице вручную добавляется столбец с заголовком "Срок деятельности". Кодом VBA анализируется дата в каждой ячейке столбца "Дата изменения статуса", и в соседнюю ячейку вставляется дата с увеличенной датой на год.
Дополнительный столбец добавляется в конец таблицы стандартными средствами Word.
Кодом VBA реализуется:
При работе с датой следует помнить, что она определена как текстовый тип данных.
Определяем название привязки типа "Список", которая представляет нужную таблицу (см. Руководство пользователя → Пример определения названия привязки типа "Список").
Sub ПослеВыполненияОтчета(ob As Variant, app As Variant) 'Вводная часть 'название закладки для привязки типа Список, формирующей нужную таблицу StatusBookmarksName = "Изменения_процесса_e1ded8b0" columnDate = 4 'столбец в таблице, содержащий исходную дату 'Проверка на корректность названия привязки Dim StatusOk As Boolean 'сначала считаем, что нужной закладки нет Dim Bkm As Bookmark 'переменная типа Закладка 'если искомая закладка есть среди закладок в документе For Each Bkm In ActiveDocument.Bookmarks If Bkm.Name = StatusBookmarksName Then StatusOk = True 'отмечаем, что закладка есть 'будем работать с таблицей через закладку Set tableStatus = Application.ActiveDocument.Bookmarks(StatusBookmarksName).Range.Tables(1) End If Next 'Процедурная часть If StatusOk Then 'если есть необходимая закладка countTableStatus = tableStatus.Rows.Count 'количество строк таблицы For i = 2 To countTableStatus 'будем проходить по всем строкам таблицы кроме первой dateEdit = tableStatus.Cell(i, columnDate).Range.Text 'получаем значение даты из ячейки dateEditLen = Len(dateEdit) 'длина текста If dateEditLen > 1 Then 'если не пусто dateEdit = Left$(dateEdit, (dateEditLen - 2)) 'удаляем 2 последних символа - чистый текст yearValidText = Right$(dateEdit, 2) 'берем 2 последние цифры года yearValidDigit = CInt(yearValidText) + 1 'превращаем текст в целое число + 1 год If yearValidDigit < 10 Then 'если год до 10 (т.е. не двузначное) yearValidText = "0" + CStr(yearValidDigit) 'дата текстом = 0 + число Else yearValidText = CStr(yearValidDigit) 'иначе просто дата текстом End If ddmmValid = Left$(dateEdit, (Len(dateEdit) - 2)) 'от исходной даты берем "дд.мм.", без гг dateValidText = ddmmValid + yearValidText 'дата проверки = дд.мм. + гг tableStatus.Cell(i, columnDate + 1).Range.Text = dateValidText 'заносим текст в ячейку "Срок действия" End If Next i End If End Sub