Применение границ к InlineShape применяется к таблице, в которой он находится, а не к изображению - PullRequest
1 голос
/ 14 февраля 2020

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

Picture of Current border application here

Вот мой код:

ActiveDocument.Tables(1).Columns(3).Select

For Each iPicture In Selection.InlineShapes
    With iPicture
        .Borders.Enable = True
        .Borders.OutsideColor = wdColorRed
        .Borders.OutsideLineWidth = wdLineWidth150pt
        .Borders.OutsideLineStyle = wdLineStyleSingle
    End With
Next

Я также попытался поместить следующий код внутри With iPicture, но, похоже, ничего не изменилось, все еще рисуя границу вокруг ячейки, а не на картинке.

With .Borders(wdBorderLeft)
    .LineStyle = wdLineStyleSingle
    .LineWidth = wdLineWidth150pt
    .Color = wdColorRed
End With

With .Borders(wdBorderRight)
    .LineStyle = wdLineStyleSingle
    .LineWidth = wdLineWidth150pt
    .Color = wdColorRed
End With

With .Borders(wdBorderTop)
    .LineStyle = wdLineStyleSingle
    .LineWidth = wdLineWidth150pt
    .Color = wdColorRed
End With

With .Borders(wdBorderBottom)
    .LineStyle = wdLineStyleSingle
    .LineWidth = wdLineWidth150pt
    .Color = wdColorRed
End With

1 Ответ

0 голосов
/ 15 февраля 2020

Мои тесты были безрезультатными. Некоторые объекты получили границы; с другими границы были применены к ячейке.

Однако во всех последних случаях, если я поместил пробел после объекта (в конце ячейки), граница была применена правильно.

Поэтому я подозреваю, что это как-то связано с меткой скрытого абзаца в конце ячейки, которая иногда каким-то образом попадает в объект InlineShape.

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

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

Sub BorderInlineShapes()
    Dim sel As Word.Selection
    Dim ils As Word.InlineShape
    Dim rng As Word.Range
    Dim colNr As Long
    Dim tbl As Word.Table

    Set sel = Selection
    If sel.Tables.Count = 1 Then
        Set tbl = sel.Tables(1)
        colNr = sel.Information(wdEndOfRangeColumnNumber)
        For Each ils In sel.InlineShapes
            If Not ils.Borders.Enable Then ils.Borders.Enable = True
            If ils.Range.Cells.Count > 0 Then
                Set rng = ils.Range
                If rng.Cells(1).Range.Characters.Count <= 2 Then
                    rng.InsertAfter " "
                    tbl.Columns(colNr).Select
                End If
            End If
            ils.Borders.OutsideColor = wdColorRed
            ils.Borders.OutsideLineWidth = wdLineWidth075pt
        Next
    End If
End Sub
...