Добрый день!
Столкнулся с такой ситуацией: в тексте есть строчки и сноски, где есть гиперссылки.
Хотел удалить пробелы после гиперссылок, но макросом сделать этого не смог! В стандартном механизме Word найти и заменить с помощью подстановочных знаков выражение ([^0032]{1;}) не подходит для поиска! Один пробел принадлежит гиперссылке, а второй - простой пробел. Word их видит как отдельные разные пробелы!
Подскажите пожалуйста, как быть?
[вложение удалено администратором]
В приложенном файле гиперссылка не рабочая. Может быть это недопустимо, что гиперссылка нерабочая, и нет смысла решать проблему с пробелами?
Это не важно. На самом деле никто не будет проверять. Удалять гиперссылки не нужно. А удалить пробелы - нужно. В тексте у меня очень много таких гиперссылок.
Этот макрос не удаляет двойные пробелы, а удаляет левые и правые концевые пробелы в гиперссылках.
После этого макроса нерабочие гиперссылки станут рабочими.
Макрос
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
Класс!
Большое спасибо!
А можно задать диапазон поиска так:
Set rng=selection и потом написать так:
For i = rng.Fields.Count To 1 Step -1 и т.д.
или это не будет работать?
Да, можно так.
Спасибо!