Выберите вставленное изображение в слове - PullRequest
0 голосов
/ 01 октября 2018

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

У меня есть похожий макрос в Excel, который выглядит следующим образом:

Sub Macro1()

    ActiveSheet.PasteSpecial Format:="Picture (Enhanced Metafile)", Link:=False _
        , DisplayAsIcon:=False
    Selection.ShapeRange.Width = 255

End Sub

Это было просто записано в Excel и работает как шарм.Тем не менее, кажется, невозможно сделать то же самое в слове.

Если я не использую запись макроса, я просто вставлю картинку и сдвигаю + стрелку влево, чтобы выбрать картинку.Но как только я начинаю записывать, это не работает.Я посмотрел вокруг и, очевидно, это связано с Inlineshapes?Но я не могу найти фрагмент кода, который на самом деле позволяет мне выбрать только что вставленную картинку, чтобы потом изменить ее размер.

Почему это сделано таким образом и как я могу это исправить?

1 Ответ

0 голосов
/ 01 октября 2018

Когда вы вставляете в 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...