Макрос Word для установки макета и размера изображения - PullRequest
0 голосов
/ 29 ноября 2018

Я пытаюсь записать макрос, который установит размер вставленного изображения в 6,5 x 4 см и макет изображения «перед текстом».Я обычно устанавливаю это, щелкая правой кнопкой мыши на изображении и устанавливая свойства изображения, но это не доступно при записи макроса.Использование Shift-F10 вызывает меню, но опция установки свойств макета изображения затенена.

Пожалуйста, помогите!

Спасибо

1 Ответ

0 голосов
/ 29 ноября 2018

Да, это интересно в макрос-рекордере ...

Если вам понадобится сделать что-то подобное в будущем, это поможет вам узнать, что объект с любым видом форматирования текста (что "плавает") это 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...