2013-05-09 99 views
0

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

+0

我用'.RelativeVerticalPosition = wdRelativeVerticalPositionLine'检查了你的问题,它可以正常工作,无论我放哪个段落的形状。我在Document中有一些文本,运行你的宏,而不是单独将它设置为'... PositionLine',它的工作原理。另外一个提示 - 尝试从你的宏中完全删除'.Relative ... Position'属性,这也应该给出好的结果。 – 2013-05-09 06:05:52

+0

谢谢你看KazJaw。没有 - 它绝对不行,无论是.Relative .... Line还是没有,大概是因为我有其他设置。第1段工作正常,但每段都增加了大约6厘米的向下偏移量,所以如果我能够算出我所在的段落,我可以将其作为解决方案予以抵消。任何想法如何找到页面上的段落号码?谢谢 – TimX 2013-05-09 09:27:46

+0

它很复杂,可能会导致意外的行为,具体取决于文档中的文本和对象。如果我有纯文本,这是一种在第3页上选择第3段的方法:'ActiveWindow.Panes(1).Pages(3).Rectangles(1).Range.Paragraphs(3).Range.Select'如果发生任何错误那么你需要自己试验代码。 – 2013-05-09 09:47:38

回答

0

首先,您还必须设置RelativeVerticalPosition。
其次,小心使用.ShapeRange。在某些情况下,.ShapeRange的使用可能会成为问题。
这是我的代码中的一小段代码。只需用Word 2010的测试,它

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


所以,如果你的“文本移动对象”未选中,它会成为检查运行的代码之后。