Ответ 1
вам нужно удалить строку, ссылка будет меняться после того, как она появится, и измените ее, как только документ будет снова открыт.
Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
Есть ли способ применить стиль "автоматически обновляемый" для гиперссылки?
Я считаю, что этот вопрос не является тривиальным.
Когда вы обычно нажимаете на гиперссылку, она меняет цвет на фиолетовый. Затем, если вы сохраните, закройте, а затем снова откройте документ, ссылка будет обновлена до синего. Это поведение 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
.
вам нужно удалить строку, ссылка будет меняться после того, как она появится, и измените ее, как только документ будет снова открыт.
Selection.Range.Hyperlinks(1).Range.Fields(1).Result.Style = Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
это делает это для меня
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
Вам не нужно менять стиль с помощью кода, чтобы сделать ссылку фиолетовой. Просто используйте метод Follow
. Это щелкнет по ссылке и превратит ее в фиолетовый, а затем будет reset синим цветом при открытии документа снова.
Sub Test1()
Selection.Range.Hyperlinks(1).Follow
End Sub
Вы можете использовать стили ссылок reset с кодом VBA, который запускается при запуске, т.е. является частью Document_Open()
procedure в ThisDocument
Модуль VBA.
Hyperlink
class не имеет никакого свойства .Visited
или чего-либо значимого (т.е. вы даже не можете увидеть, был ли он посещен), так что нет другого пути рядом с .Follow()
, который также открывает ссылку, как она должна.
Это свидетельствует о том, что Word не имеет и не имеет специального средства для переключения статуса ссылки, кроме .Follow()
.. Это означает, что любой способ, который вы обнаружите, имеют желаемый эффект, связанный с тем, что вы называете "обходным путем".
"Временный" цвет следующей гиперссылки представляет собой встроенную (а не напрямую доступную) функцию встроенного стиля символов гиперссылки. Он не отображается через обычные инструменты интерфейса UI или через объектную модель.
Вы можете легко сравнить все форматирование между двумя вариантами выбора с помощью панели "Форматирование раскрытия" (Shift + F1) в окне документа в Word.
Если вы сравниваете гиперссылку с обычной гиперссылкой с гиперссылкой, затронутой вашим фрагментом, вы увидите, что следующая гиперссылка по-прежнему имеет стиль гиперссылки, в то время как ваши симулированные последующие изменения изменили стиль второй гиперссылки.
Если вы сравниваете непревзойденную гиперссылку и обычно следующую гиперинформацию, Word определяет их форматирование как точно. Word не признает, что любой аспект форматирования (стиль, цвет шрифта и т.д.) Изменился.
Похоже, что используемая Word.WdBuiltinStyle.wdStyleHyperlinkFollowed
существует явно для устранения этого пробела (что несколько разочаровывает).
Я рекомендую использовать существующий подход, а затем возвращать стиль в процедуре, вызванной событиями Before Save
и Before Close
документа. Использование этих событий будет препятствовать сохранению следующего стиля, поэтому избегайте проблем, вызванных тем, кто открывает документ без включения макросов.
Option Explicit
Sub test()
Dim HL As Hyperlink
For Each HL In Sheet1.Hyperlinks
HL.Range.Style.Font.Color = vbBlue
Next
End Sub
Не можете ли вы просто сделать любой цвет, который вам нужен, не вызывая его. Как утверждали другие, все, что вы, я думаю, будет работать, поскольку это не предназначенная функция.