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


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

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

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

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

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

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

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

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

Шаги решения

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

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

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

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

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

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

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

Результат

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