Да, это интересно в макрос-рекордере ...
Если вам понадобится сделать что-то подобное в будущем, это поможет вам узнать, что объект с любым видом форматирования текста (что "плавает") это Shape
.Объект, который ведет себя как персонаж - это InlineShape
.И вы можете конвертировать между ними, используя ConvertToInlineShape
/ ConvertToShape
.Для будущих вещей такого рода, которые должны дать вам отправную точку: -)
В следующем примере кода используется ConvertToShape
, чтобы можно было применять форматирование переноса текста.(Преобразование - это дополнительный шаг, который вам не нужно выполнять в пользовательском интерфейсе - Word сделает это за вас.)
До того, как это произойдет, код изменяет размер, но это может быть и другой способ.вокруг, изменяя размер объекта Shape
.
Что еще происходит в коде: когда изображение вставляется в строку, оно не выбирается.Таким образом, этот код вычисляет, сколько изображений (InlineShapes
) уже есть в документе до выбора.После вставки код затем выбирает существующее количество картинок до этой точки плюс один, чтобы получить только что вставленную картинку.
Код использует CentimetersToPoints
для преобразования количества сантиметров, которое требуетсяизмерение точек, поскольку именно это Word использует для определения размера графических объектов (и многих других).
Как я узнал, что использовать wdWrapFront
: при вводе shp.WrapFormat.Type =
редактор VBA автоматически покажетсписок допустимых записей для форматирования текста.Точно так же, когда набирается shp.
, появится список допустимых свойств для Shape
и так далее.(Это называется IntelliSense и это прекрасная помощь!)
Sub PasteAndSelectPicture()
Dim ils As Word.InlineShape
Dim shp As Word.Shape
Dim lNrIls 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
lNrIls = rngDoc.InlineShapes.Count
rngSel.Paste
' Debug.Print rngDoc.InlineShapes.Count, lNrIls
Set ils = rngDoc.InlineShapes(lNrIls + 1)
ils.width = CentimetersToPoints(6.5)
ils.height = CentimetersToPoints(4)
Set shp = ils.ConvertToShape
shp.WrapFormat.Type = wdWrapFront
End SUb