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


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

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

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

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

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

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

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

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

Шаги решения

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

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

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

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

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

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

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)
 
    'название з часть
 
    ипа Список, формирующей нужную таблицу
    StatusBookmarksName = "Изменеисок, формирующей нужную таблицу
    StatusBookmarksName = "Изменения_процесса_e1ded8b0"
    columnDate = 4 и
        Dim StatusOk As Boolean 'сначала счжащий исходную дату
 
 
         Bkm As Bookmark 'переменная типа Закладка
 ь названия привязки
        Dim StatusOk As Boolean в документе
        For Each Bkm In ActiveDocument закладки нет        
 
        Dim Bkm As Bookmark            
              па Закладка
 
 
                     'будем работать с таблицей через закладку
еди закладок в документе
        For Each Bkm In ActiveDocument.Bookmarks
 
            If Bkm.Name = StatusBookmarksName Then
 
                StatusOk = True      
    If StatusOk Then 'екладка есть
                   
        countTableStatus = tableStatusцей через закладку
                Set tableStatus = Application.ActiveDocument.Bookmarks(StatusBookmarksName).Range.Tables(1)
 
            End If
 
        Next
 
e).Range.Text 'получя  часть
 
    If StatusOk Then           dateEditLen = Len(dateимая закладка
 
 
        countTableStatus = tableStatus.Rows.Count    
                dateEdрок таблицы
 
 
        For i = 2 To countTableStatus тый текст
 
                yearValidTeам таблицы кроме первой
 
 
            dateEdit = tableStatus.Cell(i, columnDate).Range.Text  целое число + 1 год
              даты из ячейки
 
            dateEditLen = Len(dateEdit)  (т.е. не двузекста
 
 
            If dateEditLen > 1 Then      yearValidTпусто
 
 
                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 If 0 + число
 
 

Результат

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