【发布时间】:2014-07-23 16:13:51
【问题描述】:
在 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 多年旧代码的后果之一?
【问题讨论】:
-
我已经用
.RelativeVerticalPosition = wdRelativeVerticalPositionLine检查了你的问题,无论我把形状放在哪个段落都可以正常工作。我在 Document 中有一些文本,运行你的宏,而不是单独将其设置为...PositionLine并且它可以工作。另一个提示 - 尝试从您的宏中完全删除两个.Relative...Position属性,这也应该会产生良好的结果。 -
感谢您关注 KazJaw。不 - 它绝对不起作用,无论是 .Relative....Line 还是什么都没有,大概是因为我有其他一些设置。第 1 段工作正常,但之后的每个段落都增加了大约 6 厘米的向下偏移量,所以如果我可以计算我所在的段落,我可以将其作为一种解决方法来抵消。任何想法如何在页面上找到段落编号?谢谢
-
它相当复杂,并且可能会导致意外行为,具体取决于文档中的文本和对象。如果我有纯文本,这是在第 3 页选择第 3 段的一种方法:
ActiveWindow.Panes(1).Pages(3).Rectangles(1).Range.Paragraphs(3).Range.Select如果出现任何错误,那么您需要自己试验代码。
标签: vba textbox position ms-word