Ошибка InsertCrossReference на последнем элементе

Я думаю, что нашел ошибку с InsertCrossReference. Если я использую исходный код для последнего элемента списка в документе, а после этого элемента списка ничего нет, происходит сбой с ошибкой "Ошибка времени выполнения" 4198 "Команда не удалась". Если делать вручную, то все работает. Итак, вы думаете, я неправильно написал код, но это не так. Чтобы убедиться, я записал макрос вставки перекрестной ссылки, а затем запустил записанный макрос, и произошла та же ошибка.

Я гуглил эту проблему и видел, как несколько человек подняли ее, но а) они не указали, что она не работает только для последнего элемента списка, и в документе ничего нет после этого элемента списка б) у них не было никаких обходные ответы.

Я использую Word 2010, но я также пробовал его в Word 2013, и происходит то же самое.

Если вам нужен пример, если я настрою следующее:

Это моя ссылка

  1. Привет
  2. до свидания

где 1 и 2 — стандартные нумерованные списки, и у меня ничего нет в документе после «Пока», а затем я запускаю:

ActiveDocument.Range(16, 16).InsertCrossReference ReferenceType:="Numbered item", _
ReferenceKind:=wdNumberFullContext, ReferenceItem:="2", InsertAsHyperlink _
:=True, IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "

Обратите внимание, что ничего не нужно после «Пока». Если вы начнете новую строку с типом списка или без него, приведенный выше код будет работать.

Если у кого-то есть обходной путь для этого, я был бы признателен.


person crookie    schedule 04.03.2015    source источник
comment
Я столкнулся с той же проблемой в Word 2013, и единственный обходной путь, который я смог найти, — добавить абзац в конец документа. Строка из @Toby сработала для меня - сделайте ActiveDocument.Paragraphs.Add Range:=ActiveDocument.Range(ActiveDocument.Range.End -1, ActiveDocument.Range.End -1) перед добавлением внешней ссылки, если целевой абзац является последним в документе.   -  person cxw    schedule 28.12.2017


Ответы (1)


Вы не можете вставить что-либо ПОСЛЕ последнего знака абзаца в документе. У меня была эта проблема в прошлом. Моя работа заключалась в том, чтобы прагматично добавить знак абзаца.

Что-то вроде следующего:

Dim CRRange as Word.Range 'Make a range object to store where the cross reference will go.
set CRRange = ActiveDocument.Range(16,16)

if CRRange.end >= ActiveDocument.Range.End then 'Check to see if we reached the end of the document
    ActiveDocument.Paragraphs.Add Range:=ActiveDocument.Range(ActiveDocument.Range.End -1, ActiveDocument.Range.End -1)
End If

CRRange.InsertCrossReference ReferenceType:="Numbered item", _
    ReferenceKind:=wdNumberFullContext, ReferenceItem:="2", InsertAsHyperlink _
    :=True, IncludePosition:=False, SeparateNumbers:=False, SeparatorString:=" "
person gNerb    schedule 05.03.2015
comment
Привет Тоби. Спасибо за ваш ответ, но я добавляю InsertCrossReference не после знака последнего абзаца, я добавляю его после Это моя внешняя ссылка, и поэтому, когда я пробую ваш код, он не входит в оператор If. Это не может быть связано с тем местом, куда я его добавляю, как будто я добавляю ссылку на второй элемент списка (т.е. ReferenceItem:=1), а все остальное остается таким же, все работает - person crookie; 05.03.2015