#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. Спасибо за все предложения, очень полезно.