Command disabled: index


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

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

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

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

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

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

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

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

Шаги решения

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

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

Кодом 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

Результат

Рисунок 3. Вид отчета после выполнения
« ПредыдущаяНа уровень вышеСледующая »
 
Driven by DokuWiki