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

Автор RuR, 03 апреля 2020, 16:42

RuR

Для выделения всех рисунков (картинок) типа "Shape" я использую это:
ActiveDocument.Shapes.SelectAll

Как выделить все рисунки типа "InlineShape"?

Я выделяю все рисунки, чтобы затем в программе "Word" (вручную, без макроса) их оформить.

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

В VBA нет инструмента для одновременного выделения всех рисунков типа "InlineShape", можно выделить только один рисунок.
Но можно двигаться по всем рисункам и можно обрабатывать каждый рисунок отдельно.
Но некоторые действия, какие юзер может делать в ворде, нельзя сделать в VBA. Поэтому заранее не известно, возможно ли применить к рисунку нужное оформление с помощью VBA.

Sub Макрос()

    Dim рис As InlineShape
   
    ' Движение по всем рисункам с типом "InlineShape".
    For Each рис In ActiveDocument.InlineShapes
        ' Отображение высоты рисунка в окне View - Immediate Window.
        Debug.Print рис.Height
    Next рис
   
End Sub

RuR

Есть методы:
ConvertToInlineShape
ConvertToShape

Возможен ли перевод из InlineShape в Shape, выделение всех картинок с помощью ActiveDocument.Shapes.SelectAll, форматирование вручную, обратный перевод в InlineShape?

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

Вот так можно перевести все рисунки типа "InlineShape" в рисунки типа "Shape":

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

    Dim i As Long
   
    ' Движение по всем рисункам с типом "InlineShape" от последнего к первому.
        ' От первого к последнему не двигаемся, т.к. будет сбиваться
        ' порядковая нумерация рисунков типа "InlineShape".
        ' Т.к. после превращения рисунка типа "InlineShape" в "Shape"
        ' исчезнет рисунок типа "InlineShape".
    For i = ActiveDocument.InlineShapes.Count To 1 Step -1
        ActiveDocument.InlineShapes(i).ConvertToShape
    Next i
   
End Sub
[свернуть]

Вот так можно перевести все рисунки типа "Shape" в рисунки типа "InlineShape":

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

    Dim i As Long
   
    ' Движение по всем рисункам с типом "Shape" от последнего к первому.
        ' От первого к последнему не двигаемся, т.к. будет сбиваться
        ' порядковая нумерация рисунков типа "Shape".
        ' Т.к. после превращения рисунка типа "Shape" в "InlineShape"
        ' исчезнет рисунок типа "Shape".
    For i = ActiveDocument.Shapes.Count To 1 Step -1
        ActiveDocument.Shapes(i).ConvertToInlineShape
    Next i
   
End Sub
[свернуть]

RuR

После превращения картинок типа "InlineShape" в картинки типа "Shape", все картинки документа оказываются на первом листе друг на друге в куче.

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

Не обращайте на это внимание. Выделите рисунки, примените оформление и снова превратите их в InlineShape.