Word VBA Макросы: Удалить лишние пробелы в гиперссылках

Автор Anton, 07 января 2018, 15:29

Anton

Добрый день!
Столкнулся с такой ситуацией: в тексте есть строчки и сноски, где есть гиперссылки.
Хотел удалить пробелы после гиперссылок, но макросом сделать этого не смог! В стандартном механизме Word найти и заменить с помощью подстановочных знаков выражение ([^0032]{1;}) не подходит для поиска! Один пробел принадлежит гиперссылке, а второй - простой пробел. Word их видит как отдельные разные пробелы!
Подскажите пожалуйста, как быть?


[вложение удалено администратором]

Администратор

В приложенном файле гиперссылка не рабочая. Может быть это недопустимо, что гиперссылка нерабочая, и нет смысла решать проблему с пробелами?

Anton

Это не важно. На самом деле никто не будет проверять. Удалять гиперссылки не нужно. А удалить пробелы - нужно.  В тексте у меня очень много таких гиперссылок.

Администратор

Этот макрос не удаляет двойные пробелы, а удаляет левые и правые концевые пробелы в гиперссылках.
После этого макроса нерабочие гиперссылки станут рабочими.

Макрос
Sub макрос()

    Dim text As String, i As Long
   
    ' Отключение монитора (может это ускорит макрос).
    Application.ScreenUpdating = False
   
    ' Двигаемся от последнего поля к первому, т.к. будем вносить изменения в поля и
        ' может быть они изменят порядковую нумерацию.
    For i = ActiveDocument.Fields.Count To 1 Step -1
        ' Если это гиперссылка.
        If ActiveDocument.Fields(i).Type = wdFieldHyperlink Then
            '1) Копируем текст гиперссылки в переменную "text", чтобы удобнее писать и читать код.
            text = ActiveDocument.Fields(i).Result.text
            '2) Удаляем левые и правые концевые пробелы.
            text = Trim(text)
            '3) Записываем текст обратно в гиперссылку. Это нужно для нерабочих гиперссылок,
                ' чтобы нерабочая гиперссылка стала рабочей, чтобы потом использовать свойство "TextToDisplay".
            ActiveDocument.Fields(i).Code.text = "HYPERLINK " & text
            '4) Здесь происходит удаление лишних пробелов.
            ActiveDocument.Fields(i).Result.Hyperlinks(1).TextToDisplay = text
        End If
    Next i
   
    ' Включение монитора.
    Application.ScreenUpdating = True

End Sub
[свернуть]

Anton

Класс!
Большое спасибо!
А можно задать диапазон поиска так:
Set rng=selection и потом написать так:
For i = rng.Fields.Count To 1 Step -1 и т.д.

или это не будет работать?