Word VBA Макросы: Расположить рисунки по центру страницы.

Автор Anton, 31 марта 2017, 20:09

Anton

В документе есть много рисунков, совершенно разных, которые привязаны к абзацу и просто "висячие". Как можно их все отцентрировать на страницах?
У рисунков, привязанных к абзацу, абзацный отступ мешает. У меня рисунки большие, с абзацным отступом бросается в глаза. Его можно обнулить?

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

Висячие рисунки ведь можно вставить в абзац, а затем уже настроить параметры абзаца, в котором находится рисунок.

Anton

Можно, но есть такие тексты, где кроме как расположить по центру, трогать нежелательно, форматирование уезжает.

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

Макрос работает с рисунками, вставленными в абзац, и с висячими рисунками.
У рисунков, вставленных в абзац, изменяются параметры абзацы.
Висячие рисунки двигаются по горизонтали (в других направлениях не двигаются) в центр страницы относительного левого и правого поля страницы.

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

    Dim inshape As InlineShape, shape As shape
   
   
    '1. Откл. монитора.
    Application.ScreenUpdating = False
   
    '2. Установка рисунков, вставленных в абзацы.
    For Each inshape In ActiveDocument.InlineShapes
        With inshape.Range.ParagraphFormat
            .Alignment = wdAlignParagraphCenter
            .LeftIndent = CentimetersToPoints(0)
            .RightIndent = CentimetersToPoints(0)
            .FirstLineIndent = CentimetersToPoints(0)
        End With
    Next inshape
   
    '3. Установка висячких рисунков.
    For Each shape In ActiveDocument.Shapes
        shape.RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin
        shape.Left = wdShapeCenter
    Next shape
   
    '4. Вкл. монитора.
    Application.ScreenUpdating = True
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]

Anton

Вот это да! Класс! Даже так можно! Спасибо! Не ожидал!

Hunter

Как можно расположить рисунки по центру в выделенном фрагменте?
Рисунки могут быть как вставленные в абзац, так и висячие.
Если я заменяю ActiveDocument.Shapes на Selection.Shapes, то возникает ошибка.

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

В ворде нельзя одновременно выделить абзацные и висячие рисунки, поэтому если надо одновременно работать и с абзацными и с висячими рисунками, то нет возможности воздействовать на висячие рисунки с помощью Selection.

Висячий рисунок всегда привязан к какому-нибудь абзацу. Поэтому можно получить доступ к висячему рисунку через абзац.

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

    Dim inshape As InlineShape, shape As shape, par As Paragraph
   
   
    '1. Откл. монитора.
    Application.ScreenUpdating = False
   
    '2. Установка рисунков, вставленных в абзацы.
    For Each inshape In Selection.InlineShapes
        With inshape.Range.ParagraphFormat
            .Alignment = wdAlignParagraphCenter
            .LeftIndent = CentimetersToPoints(0)
            .RightIndent = CentimetersToPoints(0)
            .FirstLineIndent = CentimetersToPoints(0)
        End With
    Next inshape
   
    '3. Установка висячих рисунков.
    For Each par In Selection.Paragraphs
        For Each shape In par.Range.ShapeRange
            shape.RelativeHorizontalPosition = wdRelativeHorizontalPositionMargin
            shape.Left = wdShapeCenter
        Next shape
    Next par
   
    '4. Вкл. монитора.
    Application.ScreenUpdating = True
   
    '5. Сообщение.
    MsgBox "Готово.", vbInformation
   
End Sub
[свернуть]