1

У меня есть большой файл Word docx с текстом и множеством картинок. Я хотел бы применить стиль рамки / рамки ко всем изображениям одновременно. Я не хочу делать это индивидуально для всех картинок.

Поэтому я считаю, что макрос - это путь, но я не очень хорошо разбираюсь в создании макросов Word. Я думаю, что это начало, но получаю ошибку при попытке применить настройки к элементу <hr> .

Вот код макроса, который я использовал. Я подозреваю, что требуется лишь небольшая настройка (позволяющая коду работать со всеми объектами изображения).

Sub addborder()
'
' addborder Macro
'
'
Dim i As Long, j As Long
With ActiveDocument.Range
    For i = 1 To .InlineShapes.Count
        With .InlineShapes(i)
            For j = 1 To .Borders.Count
                .Borders(j).LineStyle = wdLineStyleSingle
                .Borders(j).Color = wdColorAutomatic
            Next j
        End With
    Next i
End With
End Sub

Благодарю.


Добавлено:

Обратите внимание, что внутри документа есть некоторый <hr> , и этот элемент останавливает макрос (не может применить эти параметры к элементу <hr> ). Таким образом, макрос должен выбирать только изображения изображений.

1 ответ1

0

Все изображения в вашем документе Word должны быть отформатированы как «в соответствии с текстом», чтобы этот фрагмент кода работал. Обтекание текста документа вокруг изображения любым другим способом делает его объектом VBA Shape, а не объектом InlineShape.

Форматы изображений в Word

Кроме того , объект границы сек включает в себя все 4 стороны. Тебе не нужен твой второй ...Следующее утверждение в цикле 4 четыре раза, чтобы установить стиль и цвет на каждой стороне.

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

В Office 2007 это работает для меня:

Dim i As Long, j As Long
With ActiveDocument.Range
    For i = 1 To .InlineShapes.Count
        With .InlineShapes(i)
                .Borders(1).LineStyle = wdLineStyleSingle
                .Borders(1).Color = wdColorAutomatic
    ' optional  .Borders(1).LineWidth = wdLineWidth225pt

        End With
    Next i
End With

РЕДАКТИРОВАТЬ:

По поводу вашей <hr> ошибки. Не все объекты InlineShape являются изображениями. Вы можете указать в своем коде VBA, чтобы выбрать только InlineShapes, чей тип является изображение.

Вероятно, поэтому я предпочитаю ссылаться на объекты напрямую как «InlineShape», а не группировать их все вместе с «InlineShape-s». Вы не можете легко добраться до свойства Type с помощью InlineShape-s.

    Dim inshape As InlineShape
    Dim ashape As shape  

    For Each inshape In ActiveDocument.InlineShapes

      If inshape.Type = wdInlineShapePicture Then

           inshape.Borders(1).LineStyle = wdLineStyleSingle
           inshape.Borders(1).Color = wdColorAutomatic
 'optional inshape.Borders(1).LineWidth = wdLineWidth225pt

      End If
    Next

    'The second loop will look for pictures formatted as Shape objects

    For Each ashape In ActiveDocument.Shapes

       If ashape.Type = msoPicture Then

          ashape.Line.Style = msoLineSingle
          ashape.Line.Weight = 0.5 'default size is 0.5 pts'

       End If
    Next

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .