В моем простом тесте у меня работает следующее:
Поскольку перекрестная ссылка на конечную сноску не использует верхний индекс по умолчанию, поиск надстрочного индекса не является надежным критерием.Кроме того, другие вещи могут быть надстрочными.Word управляет перекрестными ссылками с использованием полей Ref
, и они относятся к закладке , помещенной в ссылку на сноску при использовании команды Insert cross-reference
.
Такие закладки начинаются с _Ref
, за которым следует длинное число.И поля для сносок используют имя NoteRef
.Поэтому имеет смысл получить имя (имена) закладок для ссылок на сноски (их может быть несколько), проверить, что они названы с использованием шаблона _Ref
, а затем выполнить поиск в документе для использования закладок.
Чтобы «найти» код поля, используется шаблон ^d
.Таким образом, искомый термин, за которым следуют имя кода поля (NoteRef) и название закладки.Если поиск выполнен успешно, код поля удаляется, и текст сноски записывается в этой позиции.Затем поиск продолжается с этой точки до конца документа.
Таким образом, код перебирает все концевые сноски, получает ссылку на каждую из них, получает все свои закладки, зацикливает закладки, проверяя имя (как описановыше) и ищет поля NoteRef (как описано выше).
Наконец, исходная ссылка на сноску заменяется текстом сноски.
Sub WriteEndNoteToAllEndNoteRefs()
Dim sEndNoteText As String
Dim rngEndNoteRef As Word.Range, rngSearch As Word.Range
Dim doc As Word.Document
Dim en As Word.Endnote
Dim bkm As Word.Bookmark
Dim bFound As Boolean
Set doc = ActiveDocument
For Each en In doc.Endnotes
Set rngEndNoteRef = en.Reference
sEndNoteText = en.Range.Text
For Each bkm In rngEndNoteRef.Bookmarks
If Left(bkm.Name, 4) = "_Ref" Then
Set rngSearch = doc.content
rngSearch.TextRetrievalMode.IncludeFieldCodes = True
Do
With rngSearch.Find
.Text = "^d NoteRef " & bkm.Name
.wrap = wdFindStop
bFound = .Execute
If bFound Then
rngSearch.Fields(1).Delete
rngSearch.Text = sEndNoteText
rngSearch.End = doc.content.End
End If
End With
Loop While bFound
End If
Next
rngEndNoteRef = sEndNoteText
Next
End Sub