Невозможно использовать InsertCrossReference (приводит к ошибке времени выполнения 4198) - PullRequest
0 голосов
/ 09 июня 2019

Я перебираю коллекцию строк (выглядит как «Рисунок 1»), нахожу каждое вхождение этих строк в документе Word и пытаюсь вставить в каждую из них перекрестную ссылку на подпись (мои подписи следуют этот шаблон "Рисунок 1 [00:01:20]"). По какой-то причине он полностью завершается с ошибкой в ​​строке, содержащей метод «InsertCrossReference» (выдает ошибку времени выполнения 4198 с сообщением «Команда не выполнена»). Вот часть моего кода:

For Each Match In AllMatches 'for each word in my AllMatches collection
    Set rngFind = ActiveDocument.Content
    With rngFind.Find
        .Forward = True
        .ClearFormatting
        .Text = Match.value
        .Format = False
        .MatchCase = False
        .MatchWholeWord = True
        .Wrap = wdFindStop
        Do While .Execute
            rngFind.InsertCrossReference ReferenceType:="Figure", _
                ReferenceKind:=wdOnlyLabelAndNumber, _
                ReferenceItem:=Match.value, _ 'Match.value looks like "Figure 1 [00:01:20]" (like in the picture below)
                InsertAsHyperlink:=True, _
                IncludePosition:=False, _
                SeparateNumbers:=False, _
                SeparatorString:=" "
        Loop
    End With
Next Match

Я попытался исследовать и обнаружил, что «UBound (ActiveDocument.GetCrossReferenceItems (ReferenceType: =« Figure »))» возвращает «0» (то же самое, когда я использую «wdCaptionFigure» в качестве ReferenceType).

Когда я вручную пытаюсь вставить перекрестную ссылку, все работает (см. Рисунок ниже) ...

enter image description here

Когда я записываю вставку вручную и пытаюсь запустить код, сгенерированный словом, это не получается!

Может ли проблема быть вызвана тем фактом, что надписи вставляются с помощью VBA непосредственно перед формами, а не в линейные формы (с циклом и меткой .InsertCaption: = wdCaptionFigure и т. Д.)?

---- РЕДАКТИРОВАТЬ ----

Вот некоторые шаги, которые вызывают ошибку и, кажется, подтверждают, что вставка заголовка в фигуры, а не в фигурные фигуры, позже вызывает ошибку перекрестной ссылки.

  1. Создать пустой документ Word (я использую Word 2016)
  2. Вставить картинку
  3. Измените параметр переноса текста формата изображения с «в соответствии с текстом» (= inlineshape) на что-нибудь еще (например, «через»)
  4. Щелкните правой кнопкой мыши на картинке и вставьте подпись (тип ссылки: «Рисунок», для которой подпись: «Рисунок 1»)
  5. Измените формат изображения обратно на «в соответствии с текстом»
  6. Вставьте текст в ваш документ (например, «Я тест»)
  7. Выберите «Я тест» и запустите следующий макрос:

    Sub Macro1 () Selection.InsertCrossReference ReferenceType: = "Figure", ReferenceKind: = wdEntireCaption, ReferenceItem: = "1", InsertAsHyperlink: = True, IncludePosition: = False, SeparateNumbers: = False, SeparatorString: = "" Конец Sub

Это вызывает ошибку 4198. Если вы пропустите шаг 3 и шаг 5, ошибки не будет. Я полностью застрял на этом. Я буду очень рад, если один из вас сможет мне помочь.

...