Форум по VBA, Excel и Word

Word => Макросы в Word => Тема начата: Anton от 31 марта 2017, 20:09

Название: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Anton от 31 марта 2017, 20:09
В документе есть много рисунков, совершенно разных, которые привязаны к абзацу и просто "висячие". Как можно их все отцентрировать на страницах?
У рисунков, привязанных к абзацу, абзацный отступ мешает. У меня рисунки большие, с абзацным отступом бросается в глаза. Его можно обнулить?
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Администратор от 31 марта 2017, 20:15
Висячие рисунки ведь можно вставить в абзац, а затем уже настроить параметры абзаца, в котором находится рисунок.
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Anton от 31 марта 2017, 20:38
Можно, но есть такие тексты, где кроме как расположить по центру, трогать нежелательно, форматирование уезжает.
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Администратор от 31 марта 2017, 20:56
Макрос работает с рисунками, вставленными в абзац, и с висячими рисунками.
У рисунков, вставленных в абзац, изменяются параметры абзацы.
Висячие рисунки двигаются по горизонтали (в других направлениях не двигаются) в центр страницы относительного левого и правого поля страницы.

Макрос
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
[свернуть]
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Anton от 31 марта 2017, 21:34
Вот это да! Класс! Даже так можно! Спасибо! Не ожидал!
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Hunter от 19 мая 2019, 22:03
Как можно расположить рисунки по центру в выделенном фрагменте?
Рисунки могут быть как вставленные в абзац, так и висячие.
Если я заменяю ActiveDocument.Shapes на Selection.Shapes, то возникает ошибка.
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Администратор от 19 мая 2019, 22:52
В ворде нельзя одновременно выделить абзацные и висячие рисунки, поэтому если надо одновременно работать и с абзацными и с висячими рисунками, то нет возможности воздействовать на висячие рисунки с помощью 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
[свернуть]
Название: Re: Word VBA Макросы: Расположить рисунки по центру страницы.
Отправлено: Hunter от 19 мая 2019, 23:00
Получилось. Спасибо.