Выше не работает из-за выбора команды цикла;Использование For
вместо For Each
, как ни странно, решает проблему.
Таким образом:
For i = 1 To currentWords.count
Set w = currentWords(i)
Debug.Print w.Start & " " & w.End
If isRefWord(w) Then
InsertHyperlinkToRefHeader w
End If
Next i
работает, а:
For Each w In currentWords
Debug.Print w.Start & " " & w.End
If isRefWord(w) Then
InsertHyperlinkToRefHeader w
End If
Next w
- нет.
Исходные диапазоны слов (начало и конец) в тесте были следующими:
Исходные диапазоны слов (w.Start w.End
):
1428795 1428818
1428818 1428820
1428820 1428840
1428840 1428842
1428842 1428864
1428864 1428866
1428866 1428889
1428889 1428891
1428891 1428917
Цикл For
включая добавление гиперссылки: (добавление гиперссылки изменяет диапазоны)
1428795 1428818
1428843 1428845
1428845 1428865
1428890 1428892
1428892 1428914
1428939 1428941
1428941 1428964
1428989 1428991
1428991 1429017
Однако, если используется цикл For Each
, то напечатанные диапазоны:
1428795 1428818
1428795 1428843
1428795 1428843
1428795 1428843
…
и попадают вбесконечный цикл.Диапазон для второй итерации явно отличается от диапазона, заданного циклом For
, и затем остается тем же.
Поэтому поведение двух типов циклов отличается по непрозрачной причине.Любые разъяснения по этому поводу приветствуются.