Это старая версия документа.


Прибавление года к указанной дате

Постановка задачи

В отчете от процесса в таблице со списком статусов процесса необходимо добавить столбец, который будет иметь дату бОльшую на год от даты "Дата изменения статуса" в одноименном столбце. Название этого столбца "Срок деятельности". Формат даты представлен как "дд.мм.гг".

Исходное состояние

Решение описывается с момента, когда в шаблоне отчета создана необходимая привязка типа Список.

Рисунок 1. Исходный вид привязок в шаблоне отчета

Концепция решения

В шаблоне к необходимой таблице вручную добавляется столбец с заголовком "Срок деятельности". Кодом VBA анализируется дата в каждой ячейки столбца "Дата изменения статуса", и в соседнюю ячейку вставляется дата с увеличенной датой на год.

Шаги решения

Дополнительный столбец добавляется в конец таблицы стандартными средствами Word.

Рисунок 2. Вид привязки типа список после добавления столбца "Срок действия"

Кодом VBA реализуется:

  • обращение к необходимой таблице по названию привязки;
  • чтение дат в каждой ячейке столбца "Дата изменения статуса";
  • вставка измененной на год даты в каждой ячейке столбца "Срок действия".

При работе с датой следует помнить, что она определена как текстовый тип данных.

Определяем название привязки типа "Список", которая представляет нужную таблицу. (см. Вставка привязки в шаблон отчета)

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

Результат

Рисунок 3. Вид отчета после выполнения
Актуальные новости, публикации и практики для бизнес-архитекторов и аналитиков
Driven by DokuWiki