Автоматически обновляемые ссылки

Есть ли способ применить стиль "автоматически обновляемый" для гиперссылки?

Я считаю, что этот вопрос не является тривиальным.

Когда вы обычно нажимаете на гиперссылку, она меняет цвет на фиолетовый. Затем, если вы сохраните, закройте, а затем снова откройте документ, ссылка будет обновлена ​​до синего. Это поведение Word по умолчанию, и нет необходимости использовать для него какие-либо макросы.

Я пытаюсь воспроизвести это поведение с помощью VBA. Вот код:

Sub Test1()
    Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
End Sub

Чтобы заставить его работать, просто поместите курсор в ссылку, запустите макрос и посмотрите результаты:

введите описание изображения здесь

Это прекрасно работает, за исключением того, что такие посещенные ссылки не будут автоматически обновляться после сохранения, закрытия и повторного открытия документа. См. Разницу на рисунке ниже. Ссылка "Google" открылась нормально, используя мышь Ctrl-клик; ссылка "StackOverflow" была открыта с помощью макроса:

введите описание изображения здесь

Как я уже сказал, я хочу также автоматически обновлять VBA-открытые ссылки (StackOverflow) (как Google).

Да, я понимаю, есть обходной путь - просто создайте еще один макрос, который будет запускаться каждый раз при открытии документа и изменении всех фиолетовых гиперссылок на синий. Однако это просто обходной путь, и мне это не нравится. Используя его, мы используем преобразование из "постоянного фиолетового" в "постоянный синий" вместо использования "временного фиолетового" (что означает, автоматически обновляемый без каких-либо дополнительных усилий).

Надеюсь, что все ясно. Спасибо заранее.

Обновление (было добавлено после того, как несколько ответов уже были опубликованы).

Да, я понимаю, это сработает:

Sub Test1()
    On Error Resume Next 'To avoid an error in case if the link isn't reachable
    Selection.Hyperlinks(1).Follow
End Sub

Но я хочу просто симулировать следующее, не открывая ссылку в браузере. Поэтому я не могу использовать Selection.Hyperlinks(1).Follow.

Ответ 1

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

Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed

Ответ 2

это делает это для меня

Sub resetHyperlinks()

    Dim hLink As Hyperlink

    For Each hLink In ActiveDocument.Hyperlinks
        hLink.Address = hLink.Address        ' this works
 '      hLink.ScreenTip = hLink.ScreenTip    ' this works also

    Next hLink


End Sub

Ответ 3

Вам не нужно менять стиль с помощью кода, чтобы сделать ссылку фиолетовой. Просто используйте метод Follow. Это щелкнет по ссылке и превратит ее в фиолетовый, а затем будет reset синим цветом при открытии документа снова.

Sub Test1()
    Selection.Range.Hyperlinks(1).Follow
End Sub

Ответ 4

Вы можете использовать стили ссылок reset с кодом VBA, который запускается при запуске, т.е. является частью Document_Open() procedure в ThisDocument Модуль VBA.

Hyperlink class не имеет никакого свойства .Visited или чего-либо значимого (т.е. вы даже не можете увидеть, был ли он посещен), так что нет другого пути рядом с .Follow(), который также открывает ссылку, как она должна.

  • В основном вы пытаетесь фальсифицировать информацию, которую документ предоставляет о ее состоянии: сделать ссылку посещенной, когда она на самом деле не была.
  • Тот факт, что класс даже не предоставляет свойство, означает, что разработчики Word не считают посещаемый статус частью функциональности редактора (т.е. он эффективно не существует в отношении задания программы).

Это свидетельствует о том, что Word не имеет и не имеет специального средства для переключения статуса ссылки, кроме .Follow().. Это означает, что любой способ, который вы обнаружите, имеют желаемый эффект, связанный с тем, что вы называете "обходным путем".

Ответ 5

"Временный" цвет следующей гиперссылки представляет собой встроенную (а не напрямую доступную) функцию встроенного стиля символов гиперссылки. Он не отображается через обычные инструменты интерфейса UI или через объектную модель.

Вы можете легко сравнить все форматирование между двумя вариантами выбора с помощью панели "Форматирование раскрытия" (Shift + F1) в окне документа в Word.

Если вы сравниваете гиперссылку с обычной гиперссылкой с гиперссылкой, затронутой вашим фрагментом, вы увидите, что следующая гиперссылка по-прежнему имеет стиль гиперссылки, в то время как ваши симулированные последующие изменения изменили стиль второй гиперссылки.

Если вы сравниваете непревзойденную гиперссылку и обычно следующую гиперинформацию, Word определяет их форматирование как точно. Word не признает, что любой аспект форматирования (стиль, цвет шрифта и т.д.) Изменился.

Похоже, что используемая Word.WdBuiltinStyle.wdStyleHyperlinkFollowed существует явно для устранения этого пробела (что несколько разочаровывает).

Я рекомендую использовать существующий подход, а затем возвращать стиль в процедуре, вызванной событиями Before Save и Before Close документа. Использование этих событий будет препятствовать сохранению следующего стиля, поэтому избегайте проблем, вызванных тем, кто открывает документ без включения макросов.

Ответ 6

Option Explicit

Sub test()
 Dim HL As Hyperlink
 For Each HL In Sheet1.Hyperlinks
   HL.Range.Style.Font.Color = vbBlue    
 Next
End Sub

Не можете ли вы просто сделать любой цвет, который вам нужен, не вызывая его. Как утверждали другие, все, что вы, я думаю, будет работать, поскольку это не предназначенная функция.