Я перебираю коллекцию строк (выглядит как «Рисунок 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).
Когда я вручную пытаюсь вставить перекрестную ссылку, все работает (см. Рисунок ниже) ...
Когда я записываю вставку вручную и пытаюсь запустить код, сгенерированный словом, это не получается!
Может ли проблема быть вызвана тем фактом, что надписи вставляются с помощью VBA непосредственно перед формами, а не в линейные формы (с циклом и меткой .InsertCaption: = wdCaptionFigure и т. Д.)?
---- РЕДАКТИРОВАТЬ ----
Вот некоторые шаги, которые вызывают ошибку и, кажется, подтверждают, что вставка заголовка в фигуры, а не в фигурные фигуры, позже вызывает ошибку перекрестной ссылки.
- Создать пустой документ Word (я использую Word 2016)
- Вставить картинку
- Измените параметр переноса текста формата изображения с «в соответствии с текстом» (= inlineshape) на что-нибудь еще (например, «через»)
- Щелкните правой кнопкой мыши на картинке и вставьте подпись (тип ссылки: «Рисунок», для которой подпись: «Рисунок 1»)
- Измените формат изображения обратно на «в соответствии с текстом»
- Вставьте текст в ваш документ (например, «Я тест»)
Выберите «Я тест» и запустите следующий макрос:
Sub Macro1 ()
Selection.InsertCrossReference ReferenceType: = "Figure", ReferenceKind: = wdEntireCaption, ReferenceItem: = "1", InsertAsHyperlink: = True, IncludePosition: = False, SeparateNumbers: = False, SeparatorString: = ""
Конец Sub
Это вызывает ошибку 4198. Если вы пропустите шаг 3 и шаг 5, ошибки не будет. Я полностью застрял на этом. Я буду очень рад, если один из вас сможет мне помочь.