Я получаю сообщение об ошибке object does not support method при проверке кода, который указан в списке

#excel #vba

#преуспеть #vba

Вопрос:

 Sub test()

    Dim Tbl As Table
    Set Tbl = ActiveDocument.Tables(1)

    Tbl.Cell(2, 2).Range.InlineShapes.AddPicture "C:usersuserdesktopFlower1.jpg"
    Tbl.Cell(2, 2).Range.InlineShapes(1).Select
    Selection.InsertCaption Label:="Figure", Title:=" : Caption Flower 1", _
                            Position:=wdCaptionPositionBelow
End Sub
 

Используемый в Excel (MS365), код VBA используется для создания документа Word и вставки таблицы. Изображение вставлено, но при выборе происходит сбой кода.Метод InsertCaption (ошибка 438, объект не поддерживает этот метод). Я не поклонник использования выделения, но ячейка (2,2).range.insertcaption помещает заголовок под таблицей, а не под изображением в ячейке.

Комментарии:

1. Ваш код не работает, поскольку Excel имеет свой собственный выбор. Уточните с помощью Word. Выбор. InsertCaption и т. Д. Тогда это работает.

Ответ №1:

Не думайте, что номер вашего объекта 1 указан потому, что это маловероятно. К счастью для вас, .AddPicture метод возвращает дескриптор объекта. Вам также необходимо определить подписи перед их вставкой.

Вот так:

  Sub test()

    Dim Tbl As Table
    Set Tbl = ActiveDocument.Tables(1)

    Dim labelName As String
    labelName = "Figure"
    CaptionLabels.Add Name:=labelName 

    Dim newPicture As Object
    Set newPicture = Tbl.Cell(2, 2).Range.InlineShapes.AddPicture("C:usersuserdesktopFlower1.jpg")
    newPicture.Range.InsertCaption Label:=labelName , Title:=" : Caption Flower 1", Position:=wdCaptionPositionBelow
End Sub
 

Комментарии:

1. У меня это не работает. Думаю, вам нужна новая фотография. ДИАПАЗОН. Заголовок вставки. Также, если вы объявляете newPicture как Word. В LineShape (а не в Object) вы получаете раннюю привязку и IntelliSense.

2. Спасибо @DS_London, я обновил код, чтобы включить это и строку для добавления метки заголовка перед его вставкой. docs.microsoft.com/en-us/office/vba/api /…

3. Я также обнаружил, что добавление ссылки на объект word application перед выбором в принудительном VBA для идентификации выбора как выбора слова.

4. Спасибо за все предложения, очень полезно.