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


Замена в таблицах текста "{Туннель}"

Текущая ситуация

При графическом описании бизнес-процесса допускается туннелирование стрелок. Откуда именно пришли такие стрелки или куда уходят, явно не указывается. В отчетах такие состояния стрелок вместо конкретных процессов обозначают текстом  "{Туннель}".

{Туннель} – поставщик или потребитель стрелки. Название не детализируется в случаях однозначного понимания читателями диаграммы.

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

В отчете формата Word по процессу необходимо во всех таблицах, где встречается текст "{Туннель}", сделать его замену на "—". Допускается, что за границами таблиц так же может встречаться этот текст, но его изменять не следует.

Исходные данные

Решение описывается с момента, когда существует шаблон отчета по процессу. В шаблоне существуют таблицы (различные привязки), которые содержат информацию по входам и выходам стрелок.

Invalid Link
Рисунок 1. Вид шаблона отчета с таблицами, которые могут выводить заданный текст
Invalid Link
Рисунок 2. Вид выполненного отчета с искомым текстом в некоторых ячейках

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

Так как проводить замену текста следует только в таблицах (причем в таблицах разных привязок), то необходимо определиться с признаками таблиц, в которых будет производиться изменение. Таким признаком было выбрано число столбцов в таблицах.

Чтобы сократить время работы макроса, так же определимся сразу с номером столбца, в котором необходимо производить изменения в случае необходимости.

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

Шаги решения

Количество столбцов нужных нам таблиц – 5. Изменения возможны в 5м столбце таких таблиц.

Sub ПослеВыполненияОтчета(ob As Variant, app As Variant)

'Вводная часть

    columnTableProc = 5 'кол-во столбцов в таблицах с процессами
    columnChange = 5 'столбец, в котором необходимо производить изменения

    tunnelText = "{Туннель}" 'искомый текст для замены
    newText = "---" 'текст для замены   

'Процедурная часть

    tableCount = ActiveDocument.Tables.Count 'кол-во таблиц в документе            

    For iTable = 1 To tableCount 'проходим по всем таблицам документа

        'поочередно обращаемся к каждой таблице
         Selection.GoTo What:=wdGoToTable, Which:=wdGoToFirst, Count:=iTable, Name:=""

        If Selection.Tables(1).Columns.Count = columnTableProc Then 'если в таблице по процессам

            countRow = Selection.Tables(1).Rows.Count 'кол-во строк в таблице

            For i = 2 To countRow 'проходим по всем строкам таблицы, кроме заголовка

                On Error Resume Next 'игнор error 5991, если какие-то ячейки имеют вертикальное объединение

                CellText = Selection.Tables(1).Cell(i, columnChange).Range.Text 'текст в ячейке нужного столбца
                CellText = Left$(CellText, (Len(CellText) - 2)) 'удаляем 2 последних символа - чистый текст

                If Len(CellText) <> 0 Then 'если ячейка непустая

                    If CellText = tunnelText Then 'если это текст для замены

                        'тогда задаем новое значение для ячейки

                        Selection.Tables(1).Cell(i, columnChange).Range.Text = newText

                    End If

                End If

            Next i

        End If

    Next iTable

End Sub

Результат

Invalid Link
Рисунок 3. Вид сформированного отчета после работы макроса

 

« ПредыдущаяНа уровень вышеСледующая »
Driven by DokuWiki