Когда вы вставляете в Word, используя VBA, вставленный контент не выбирается, по-видимому, это отличается в Excel.Возможно, потому что форма связана с ячейкой книги, а ячейка выбрана?
В любом случае, следующий код успешно подбирает вставленное изображение для дальнейшей манипуляции.Что он делает, так это подсчитывает количество InlineShapes от начала документа до текущего выделения плюс один символ.
После действия вставки новый InlineShape будет добавлен к числу элементов в диапазоне, чтобы его можно было выбрать по его номеру индекса - (lNrIls + 1)
.
Ради полноты я также включил вариант для вставки как Shape
(это означает, что среди прочего изображение имеет форматирование обтекания текстом).Основной подход такой же, как и для InlineShape.
Примечание. По умолчанию при вставке изображения Word будет использовать настройку Insert/paste pictures as
в меню «Файл / Параметры / Дополнительно», раздел «Вырезать, копировать и вставлять».Таким образом, на некоторых машинах изображение может быть вставлено как InlineShape, а на других - как Shape.Если вы хотите вставить специально встроенный текст или перенос текста, используйте PasteSpecial
с соответствующим значением перечисления WdOLEPlacement
либо wdFloatOverText
, либо wdInLine
.
Sub PasteAndSelectPicture()
Dim ils As Word.InlineShape
Dim shp As Word.Shape
Dim lNrIls As Long
Dim lNrShp As Long
Dim rngDoc As Word.Range
Dim rngSel As Word.Range
Set rngDoc = ActiveDocument.content
Set rngSel = Selection.Range
rngDoc.End = rngSel.End + 1
'Get an InlineShape
lNrIls = rngDoc.InlineShapes.Count
rngSel.Paste
Debug.Print rngDoc.InlineShapes.Count, lNrIls
Set ils = rngDoc.InlineShapes(lNrIls + 1)
ils.width = 255
'Get a pasted Shape
' lNrShp = rngDoc.ShapeRange.Count
' rngSel.PasteAndFormat Type:=wdFormatOriginalFormatting
' Debug.Print lNrShp, rngDoc.ShapeRange.Count
' Set shp = rngDoc.ShapeRange(rngDoc.ShapeRange.Count)
' shp.RelativeHorizontalPosition = wdRelativeHorizontalPositionCharacter
' shp.RelativeVerticalPosition = wdRelativeVerticalPositionLine
' shp.Left = 10
' shp.Top = 10
End Sub