Word VBA Макросы: Как вставить и выделить картинку (рисунок) в ворде?

Автор Vampirrus, 29 июня 2019, 01:45

Vampirrus

Необходимо вставить фото и сделать размер 10 см по высоте.
Использую код, но после второй строки нужна команда на выделение картинки. Отдельно картинка копируется и размер ставится, если вручную выделить.

Действия юзера по работе с макросом.
Юзер где-то копирует рисунок, затем переходит в ворд-файл, ставит курсор в нужную позицию и запускает макрос, который должен вставить рисунок из буфера обмена и настроить этот рисунок.
Перед запуском макроса может быть выделена картинка. Её надо заменить на картинку из буфера обмена.

Ворд 2013 профессиональный.

Макрос
Sub вставка()

    Dim inshape As InlineShape
    Dim высота As Single, пропорция As Double
   
   
    ' Запись в переменную нужной высоты в мм.
    высота = 100
   
    ' Вставка содержимого буфера обмена в выделенный фрагмент или в место курсора.
    Selection.Paste
   
    For Each inshape In Selection.InlineShapes
        пропорция = inshape.Height / inshape.Width
        inshape.Width = MillimetersToPoints(высота / пропорция)
        inshape.Height = MillimetersToPoints(высота)
    Next inshape
   
End Sub
[свернуть]

Администратор

Предполагается, что ворд настроен так, что рисунок из буфера обмена вставится в абзац, а не будет плавающим.

Выделять рисунок необходимости нет, но если вам это для чего-то надо, то используйте команду после пункта 4:
inshape.Select

Макрос
Sub вставка()

    Dim rng As Range, inshape As InlineShape
    Dim высота As Single
   
   
    '1. Запись в переменную нужной высоты в мм.
    высота = 100
   
    '2. Удаление рисунка, если выделен рисунок.
    If Selection.Type = wdSelectionInlineShape Then
        Selection.Delete
    End If
   
    '3. Вставка содержимого буфера обмена в выделенный фрагмент или в место курсора.
    Selection.Paste
   
    '4. Создаём ссылку на мигающий курсор.
    Set rng = Selection.Range.Duplicate
   
    '5. Включаем в ссылку символ, который находится слева от мигающего курсора.
    rng.MoveStart Unit:=wdCharacter, Count:=-1
   
    '6. Присваиваем рисунку имя "inshape" и далее можно обращаться в коде к рисунку по этому имени.
    Set inshape = rng.InlineShapes(1)
   
    '7. Настройки рисунка.
    '1) Ставим галочку "сохранить пропорции", чтобы при изменении высоты, ширина изменялась пропорционально.
    inshape.LockAspectRatio = True
    '2) Изменение высоты.
    inshape.Height = MillimetersToPoints(высота)
   
End Sub
[свернуть]

Vampirrus

Вставляется картинка. меняется высота, но не работает пропорция. Я взял кусок из своего макроса, тогда работает:
высота = 100
пропорция = inshape.Height / inshape.Width
inshape.Width = MillimetersToPoints(высота / пропорция)
inshape.Height = MillimetersToPoints(высота)

Администратор

У меня сохраняются пропорции при использовании моего макроса в ворде 2013.
Может быть у вас какой-то специфический рисунок.
Ещё могут влиять обновления - нужно устанавливать обновления для офиса. Обновления устанавливаются вместе с обновлениями виндоуса.

Vampirrus

Фотография имеет размер 254х338 мм, 254 меняется на 100, а вот 338 остается.
Ворд не обновляется и винда тоже.
Буду использовать свой способ настройки пропорции, указанный в ответе 2.

Спасибо Вам большое.