VBA, Word: перекрёстные ссылки согласно ГОСТ (убираем из текста паразитные названия «Рисунок..», «Таблица..» и тп)

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Меня попросили написать статью по поводу известной проблемы с паразитными названиями перекрёстных ссылок в тексте документа MS Word, а именно, когда вы вставляете в текст документа перекрёстную ссылку (меню ссылки/перекрёстная ссылка) Word позволяет вставить либо название типа "Рисунок ..." либо название полностью, что приводит к текстам типа "...на рисунке (Рисунок 10) мы видим..." или ещё более нелепым конструкциям, тогда как согласно ГОСТ, необходимо оставлять только номер "...на рисунке 10 мы видим...".

Эту проблему просто решить с помощью небольшого скрипта VBA.

Код перекрёстной ссылки (его можно посмотреть, переключая режимы просмотра "shift + f9") выглядит примерно так { REF _Ref127884797 \h } Для того, чтобы убрать паразитные названия и оставить только номер необходимо добавить в код ключ "\#0". При этом надо следить чтобы случайно не вставлялись лишние ключи (это приведёт к ошибкам) и корректно переключать отображение перекрёстной ссылки из вида "текст" в "код" и обратно.

Ниже приведён код, который это делает.

Sub PerSsylkiGost()

Dim I As Long, DlStroki As Long, LinkText$
    'Перебираем все поля типа ссылки
    For I = 1 To ActiveDocument.Fields.Count
           'Выбираем из них перекрёстные ссылки и выделяем их
        If ActiveDocument.Fields.Item(I).Type = wdFieldRef Then
            ActiveDocument.Fields.Item(I).Select
            
            With Selection
                
                LinkText = .Text
'   MsgBox Mid(LinkText, 2, 4)
                 'Проверка на корректность открытия кода ссылки, т.к. в тексте могут
           'присутствовать п.ссылки в виде кода и текста
           'приводим п.ссылку к виду "код"
                If Len(LinkText) < 4 Then
                    .Fields.ToggleShowCodes
                Else
                    If Mid(LinkText, 2, 4) = "Ref " Or Mid(LinkText, 2, 4) = " Ref" _
                    Or Mid(LinkText, 2, 4) = "REF " Or Mid(LinkText, 2, 4) = " REF" Then
                    Else
                        .Fields.ToggleShowCodes
                    End If
                End If
                
                .Find.ClearFormatting
                .Find.Replacement.ClearFormatting
                  'содержаение кода п.ссылки передаём переменной и обрезаем её с краёв  
                 LinkText = .Text
                 DlStroki = Len(LinkText)
                 LinkText = Mid(LinkText, 2, DlStroki - 2)
                 'Проверяем, не содержит ли уже п.ссылка нужный нам код - во избежание ошибок 
                If InStr(LinkText, "# 0") <> 0 Or InStr(LinkText, "#0") <> 0 Then
                Else
                    With .Find
                  'Если кода в п.ссылке нет, вставляем его   
                            .Text = LinkText
                            .Replacement.Text = LinkText & "\#0 "
                            .Forward = True
                            .Wrap = wdFindStop
                            .Format = False
                            .MatchCase = False
                            .MatchWholeWord = False
                            .MatchWildcards = False
                            .MatchSoundsLike = False
                            .MatchAllWordForms = False
                            .Execute Replace:=wdReplaceAll
    
                    End With
                 'Обновляем п.ссылки - приводим их к нормальному виду        
                .Fields.Update
                End If
            
            .Fields.Update
            End With

        End If
    
    Next I

End Sub

Казалось бы - очень простая задача, но почему-то Word не позволяет решить её стандартными средствами...

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

Пользуйтесь ))) Удачи!

Источник: https://habr.com/ru/articles/774752/


Интересные статьи

Интересные статьи

Требования ГОСТов относятся не только к оформлению документов, но и к их содержанию. В частности, ГОСТы определяют смысловое наполнение всех разделов, а также требования к изложению текста документа.К...
Что, если я скажу вам, что уже во второй половине 80-х годов ХХ века уже были машины с многозадачной ОС с развитым графическим интерфейсом, цветными дисплеями высокого разрешения, мощными процессора...
I. Предисловие Всё началось с того, что 26 января 2021 года в одноклассниках мне пришло сообщение от Валерия Иванова: Владимир, в ВА им. Дзержинского вы когда учились и в какой группе? ...
Анализ тональности — это метод обработки естественного языка (NLP), используемый для определения того, являются ли данные(текст) положительными, отрицательными или нейтра...
В наше время развернуть свой домен первого уровня в облаке можно бесплатно. Не знаете как? Читайте дальше. Предлагаю вам разобрать то, как можно создать гостевую книгу на ASP.NET Core (с reCAP...