我在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
任何帮助将不胜感激。谢谢!
答案 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