在Microsoft Word 2010中编写VBA(无人喜欢的作业)。我试图将文本框的垂直位置固定到文档中的某个位置,以便在文本之前添加时,文本框保留其相对位置(即,如果文本在与其链接的位置之前插入,则向下移动)。Word 2010中的VBA:如何修复TextBox的相对位置?
我的代码是
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'属性,这也应该给出好的结果。 – 2013-05-09 06:05:52
谢谢你看KazJaw。没有 - 它绝对不行,无论是.Relative .... Line还是没有,大概是因为我有其他设置。第1段工作正常,但每段都增加了大约6厘米的向下偏移量,所以如果我能够算出我所在的段落,我可以将其作为解决方案予以抵消。任何想法如何找到页面上的段落号码?谢谢 – TimX 2013-05-09 09:27:46
它很复杂,可能会导致意外的行为,具体取决于文档中的文本和对象。如果我有纯文本,这是一种在第3页上选择第3段的方法:'ActiveWindow.Panes(1).Pages(3).Rectangles(1).Range.Paragraphs(3).Range.Select'如果发生任何错误那么你需要自己试验代码。 – 2013-05-09 09:47:38