在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岁以上代码的后果之一?
答案 0 :(得分:0)
首先,您还必须设置RelativeVerticalPosition。
其次,要小心使用.ShapeRange。在某些情况下,.ShapeRange的使用可能是个问题
这是我代码中的一小段代码。刚刚使用Word 2010进行测试。
Dim oShp As Shape
Set oShp = Selection.ShapeRange(1)
oShp.RelativeHorizontalPosition = wdRelativeHorizontalPositionColumn
oShp.RelativeVerticalPosition = wdRelativeVerticalPositionLine
因此,如果你的"移动对象带有文字"如果未选中,则在运行代码后将对其进行检查。