我正在编写一个简单的代码来定位文档中的形状(实际上是图片)。我想让他们定位:
水平到正好0毫米。从可打印区域的左侧
垂直至7毫米。在段落下面(形状锚定到的)
我写了一个简单的代码:
Selection.ShapeRange.RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
Selection.ShapeRange.Left = MillimetersToPoints(0)
Selection.ShapeRange.RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
Selection.ShapeRange.Top = MillimetersToPoints(7)
Selection.ShapeRange.WrapFormat.Type = wdWrapTopBottom
对于页面上的1个形状,它可以正常工作。但如果有超过1个形状,它会以某种方式"抛出"第二个形状到页面顶部。看起来Word将它锚定到页面上的第1段。但它不应该。同时水平定位还可以。
感谢您解决此问题的任何帮助。
我对这个问题的可能解决方案如下:
Sub PositShape_3()
Dim I As Integer
If Selection.InlineShapes.Count <> 0 Then
For I = Selection.InlineShapes.Count To 1 Step -1
Selection.InlineShapes(I).ConvertToShape
Next I
End If
Selection.ShapeRange.RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
Selection.ShapeRange.Left = MillimetersToPoints(0)
Selection.ShapeRange.RelativeVerticalPosition = wdRelativeVerticalPositionLine
Selection.ShapeRange.Top = MillimetersToPoints(7)
Selection.ShapeRange.WrapFormat.Type = wdWrapTopBottom
End Sub
尽管使用wdRelativeVerticalPositionLine解决了这个问题,但仍然有趣的是为什么使用wdRelativeVerticalPositionParagraph会产生意想不到的意外后果。
答案 0 :(得分:0)
请注意在您向我们展示的代码中使用SELECTION
。如果不更改段落选择,则形状将始终锚定到同一段落。在Word中使用选择是很棘手的;使用更有形的对象(例如特定段落)会更好。
以下代码示例说明如何使用段落对象来锚定和定位连续添加的形状。
Sub insertShapesProgressively()
Dim shp As word.Shape
Dim shpRng As word.ShapeRange
Dim rng As word.Range
Dim iParaCounter As Long
'We want to insert the Shape anchored to three different paragraphs
' on the same page
For i = 7 To 9
Set rng = ActiveDocument.Paragraphs(i).Range
Set shp = ActiveDocument.shapes.AddShape(msoShapeWave, 0, 0, 10, 10, rng)
Set shpRng = rng.ShapeRange
shpRng.RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
shpRng.Left = MillimetersToPoints(0)
shpRng.RelativeVerticalPosition = wdRelativeVerticalPositionParagraph
shpRng.Top = MillimetersToPoints(7)
shpRng.WrapFormat.Type = wdWrapTopBottom
Next
End Sub