1

在 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 多年旧代码的后果之一?

4

1 回答 1

0

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

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


因此,如果您的“使用文本移动对象”未选中,它将在运行代码后变为选中状态。

于 2014-07-23T08:13:51.407 回答