Приведенный ниже код vba для MS Word (описан здесь: текст очень хорошо работает для преобразования URL-адресов, добавленных к кодам XE в Word, в гиперссылки. Однако он не работает в сносках. Кто-нибудь знает, как отредактировать код Visual Basic, чтобы он сделает это?
Спасибо
Sub MakeConcordance() '
Const hBase As String = "../Text/"
Const htm As String = ".htm"
Dim aCell As Cell
Dim aString As String
For Each aCell In ActiveDocument.Tables(1).Columns(2).Cells
aString = hBase & Trim(Left$(aCell.Range.Text, (Len(aCell.Range.Text) - 2))) & htm
aCell.Range.Text = aString
Next aCell
End Sub
Sub MakeHyperlinks()
Dim afield As Field
Dim url As String
Dim isHyper As Integer
For Each afield In ActiveDocument.Fields
If afield.Type = wdFieldIndexEntry Then
isHyper = 0
afield.Select
Selection.Collapse
url = Right$(afield.Code, Len(afield.Code) - 5)
url = Left$(url, Len(url) - 2)
If Left$(url, 4) = "../F" Then
isHyper = 1
End If
If Left$(url, 4) = "../T" Then
isHyper = 2
End If
If isHyper <> 0 Then
Selection.MoveStart unit:=wdCharacter, Count:=-3
Selection.MoveStart unit:=wdWord, Count:=-isHyper
afield.Delete
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
Address:=url
End If
End If
Next afield
End Sub
Коды XE можно добавить в MS Word с помощью инструмента AutoMark в разделе «Ссылки». . . Вставьте указатель, но я не понимаю, как преобразовать эти коды в гиперссылки, если не удалю сноски в конечные примечания, но тогда преобразовать конечные примечания обратно в сноски будет слишком сложно.
Функция индексирования Automark должна создавать необходимые поля XE в сносках. Проблема в том, что цикл обработки полей обрабатывает только поля в основной части документа. Поля в сноске находятся в другом «StoryRange». Вы можете обрабатывать поля во всех возможных диапазонах историй, используя код, например. wordmvp.com/FAQs/Customization/ReplaceAnywhere.htm и соответствующим образом изменив цикл For Each.
Как сказал @jonsson, используйте объект StoryRange, пожалуйста, вот так, вы можете попробовать сначала:
Sub MakeHyperlinks()
Dim afield As Field
Dim url As String
Dim isHyper As Integer
Dim sr As Range
For Each sr In ActiveDocument.StoryRanges
'For Each afield In ActiveDocument.Fields
For Each afield In sr.Fields
If afield.Type = wdFieldIndexEntry Then
isHyper = 0
afield.Select
Selection.Collapse
url = Right$(afield.Code, Len(afield.Code) - 5)
url = Left$(url, Len(url) - 2)
If Left$(url, 4) = "../F" Then
isHyper = 1
End If
If Left$(url, 4) = "../T" Then
isHyper = 2
End If
If isHyper <> 0 Then
Selection.MoveStart unit:=wdCharacter, Count:=-3
Selection.MoveStart unit:=wdWord, Count:=-isHyper
afield.Delete
ActiveDocument.Hyperlinks.Add Anchor:=Selection.Range, _
Address:=url
End If
End If
Next afield
Next sr
End Sub
Супер! Это работает отлично. Он добавляет гиперссылки как в тело, так и в сноски одновременно. Я очень благодарен, Оскар. Мне часто приходится просматривать документы с сотнями сносок, и это сэкономит мне много времени. Я сообщу вам об этом в своем блоге: судебная поддержкаtipofthenight.com
Кстати, я много раз пытался заставить ChatGPT обновить этот код VBA для меня, но он всегда не давал мне ничего, что работало. Итак, Оскар, ты все равно лучше ИИ разбираешься в vba.
@SeanO-LitSupTipofNite: Рад помочь. В этом случае, пожалуйста, примите этот ответ, чтобы закрыть этот вопрос. Большое спасибо.