Word 2010中的VBA:如何修复TextBox的相对位置?

时间:2013-05-09 02:24:13

标签: vba textbox ms-word position word-vba

在Microsoft Word 2010中编写VBA(没有人最喜欢的工作)。我正在尝试将文本框的垂直位置固定到文档中的某个位置,以便在之前添加文本时,文本框会保留其相对位置(即,如果文本在链接到的位置之前插入,则向下移动)。

我的代码是

ActiveDocument.Shapes.AddTextbox(msoTextOrientationHorizontal, 372, 400, 120, 120).Select

With Selection
    .ShapeRange.TextFrame.TextRange.Select
    .Collapse
    .TypeText Text:="Text box placement test"

    With .ShapeRange
        .Select
        .RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
        .RelativeVerticalPosition = wdRelativeVerticalPositionPage
...

我认为关键是最后一个属性RelativeVerticalPosition。

我已经尝试将其更改为wdRelativeVerticalPositionLine:这适用于第一段(即文本框固定为文本中的位置,因此如果文本在正确移动之前添加):但是,对于第二段和后续段落垂直位置是完全错误的。

我尝试更改LockAnchor属性,但不做任何更改。

令人沮丧的是,这可以手动完成(页面布局,排列组,换行文本,更多布局选项,位置,移动对象,文本=已选中)但Word不会让我录制宏,我在哪里更改文本框属性,所以我找不到设置的组合来使它工作。

有什么建议吗?或者这只是使用20岁以上代码的后果之一?

1 个答案:

答案 0 :(得分:0)

首先,您还必须设置RelativeVerticalPosition。
其次,要小心使用.ShapeRange。在某些情况下,.ShapeRange的使用可能是个问题 这是我代码中的一小段代码。刚刚使用Word 2010进行测试。

Dim oShp As Shape
Set oShp = Selection.ShapeRange(1)
oShp.RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
oShp.RelativeVerticalPosition = wdRelativeVerticalPositionLine


因此,如果你的"移动对象带有文字"如果未选中,则在运行代码后将对其进行检查。