Это немного упрощает, но это потому, что rEverything считает все до гиперссылки, затем все символы в поле гиперссылки код (включая 1 символ для каждого открытияи закрывающие фигурные скобки поля), затем все символы в поле гиперссылки результат , затем все символы после поля.
Однако количество символов вдиапазон (например, rEverything.Characters.Count или len (rEverything)) включает в себя только поле результат , если TextRetrievalMode.IncludeFieldCodes имеет значение False и включает только поле code , если TextRetrievalMode.IncludeFieldCodes имеет значениеустановите в True.
Таким образом, количество символов всегда меньше, чем range.End-range.Start.
В этом случае, если вы измените выражение Debug на что-то вроде
Debug.Print "#" & Mid(rEverything.Text, rHyperlink.Start, rHyperlink.End - rHyperlink.Start - (rEverything.End - rEverything.Start - 1 - Len(rEverything))) & "#" & vbCrLf
вы можете увидеть результаты более точно в соответствии с вашими ожиданиями.
Другой способ визуализации происходящего заключается в следующем:
Создайте очень короткий документ с фрагментом текста, за которым следует короткая гиперссылкаполе с коротким результатом, за которым следует фрагмент текста. Поместите следующий код в модуль:
Sub Select1()
Dim i as long
With ActiveDocument
For i = .Range.Start to .Range.End
.Range(i,i).Select
Next
End With
End Sub
Вставьте точку останова в строку «Следующая».
Затем выполните код один раз с отображаемыми кодами полей и один раз с отображенными результатами полей,Вы должны видеть ход выбора «пауза» либо в начале, либо в конце поля, так как Select продолжает «выбирать» то, что вы на самом деле не видите.