查找段落的边界框尺寸(Word VBA)

时间:2017-05-02 13:52:01

标签: position word-vba bounding-box paragraph

我在Word 2016中使用VBA,我想创建一个段落大小的矩形(由于其他原因我不能使用边框功能)。

我可以使用此代码获取第一个字符的位置,但该段落的底部和右端怎么样?

x = Selection.Information(wdHorizontalPositionRelativeToPage)
y = Selection.Information(wdVerticalPositionRelativeToPage)

不幸的是,以下只是我一厢情愿的想法:

w = Selection.Paragraphs(1).Width 
h = Selection.Paragraphs(1).Height

最后,我想执行以下操作来生成一个与段落周围的边界框大小相同的矩形:

ActiveDocument.Shapes.AddShape msoShapeRectangle, x, y, w, h

任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:1)

当您根据选择所指示的段落进行思考时,您走在正确的轨道上。我倾向于处理选择所指示的范围,但这是个人偏好的问题。无论如何,该段落可以分为 - 尤其是 - 第一个字符和最后一个字符。正如您已经说过的那样,页面上第一个角色的位置非常接近矩形的左上角。可以为最后一个字符建立类似的关系。以下代码可能会帮助您。

Private Sub TestPos()

    Dim Rng As Range
    Dim x As Single, y As Single

    Set Rng = Selection.Range
    Set Rng = Rng.Paragraphs(1).Range
    With Rng
        x = .Information(wdHorizontalPositionRelativeToPage)
        y = .Information(wdVerticalPositionRelativeToPage)
        Debug.Print x, y
        .Collapse wdCollapseEnd
        x = .Information(wdHorizontalPositionRelativeToPage)
        y = .Information(wdVerticalPositionRelativeToPage)
        Debug.Print x, y
        Debug.Print .Paragraphs(1).LineSpacing
    End With
End Sub

至于左侧和右侧,您应该参考为段落设置的边距。以下代码包含您需要的语法。

Private Sub ShowPageSetup()

    Dim Rng As Range

    With ActiveDocument.PageSetup
        Debug.Print .LeftMargin, .RightMargin
    End With
    Set Rng = Selection.Range
    With Rng.Paragraphs(1).Range.ParagraphFormat
        Debug.Print .LeftIndent, .RightIndent
    End With
End Sub