Word中每页上居中的文本框

时间:2018-06-26 15:41:26

标签: vba ms-word word-vba

因此,我试图编写一个代码,以在Word文档中每页的表格上方添加一个文本框。该文本框将居中以与表格对齐(我在每页上生成居中表格都没有问题)。我最近刚开始在VBA中工作,所以我的知识有点缺乏。到目前为止,这是我的代码,有点像是我在网上可以找到的东西。

    Sub TextMaker()
'
' TextMaker Macro
'
'
Dim i As Long, Rng As Range, Shp As Shape
Dim objDoc As Document
Dim objTextBox As Shape

Set objDoc = ActiveDocument

With ActiveDocument
  For i = 1 To 5
    Set Rng = .GoTo(What:=wdGoToPage, Name:=i)
    Set Shp = .Shapes.AddTextbox(Orientation:=msoTextOrientationHorizontal, _
      Left:=InchesToPoints(0.1), Top:=InchesToPoints(1.44), Width:=InchesToPoints(7.65), Height:=InchesToPoints(0.29), Anchor:=Rng)
    With Shp
      .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
      .Left = wdShapeCenter
      .RelativeVerticalPosition = wdRelativeVerticalPositionPage
      .Top = InchesToPoints(1.44)
      With .TextFrame.TextRange
        .Text = "Ref. No.: T" & vbCr & "Signature "
        Set Rng = .Paragraphs.First.Range
        With Rng
          .Font.ColorIndex = wdRed
          .End = .End - 1
          .Collapse wdCollapseEnd
        End With
      End With
    End With
  Next
End With

End Sub

输出适用于前两页,但在第三页上,文本框的对齐方式未居中。我检查了位置,并且文本框仍然说它相对于页面居中,即使它不在页面中。

只要不插入表格,代码就可以正常工作,但是如果表格生成代码在此之后运行,则不会将表格与文本框放在同一页面上。

这是我文档的第三页,那里开始出现问题。文本框应放置在桌子上方并居中对齐。

enter image description here

为了重现文档,请创建一个空白文档并运行此表生成代码:

Sub TableMaker()

     For i = 1 To 5

    ActiveDocument.Tables.Add Range:=Selection.Range, NumRows:=6, NumColumns:= _
    2, DefaultTableBehavior:=wdWord9TableBehavior, AutoFitBehavior:= _
    wdAutoFitFixed

    Selection.Tables(1).Columns(1).Width = InchesToPoints(1.39)
    Selection.Tables(1).Columns(2).Width = InchesToPoints(6.26)
    Selection.Tables(1).Rows.Alignment = wdAlignRowCenter

With Selection.Tables(1).Rows
    .WrapAroundText = True
    .VerticalPosition = InchesToPoints(1.82)
    .RelativeVerticalPosition = wdRelativeVerticalPositionPage
    .DistanceTop = InchesToPoints(0)
    .DistanceBottom = InchesToPoints(0)
    .AllowOverlap = False
End With

    'place cursor at end of page
    Selection.EndKey Unit:=wdStory

    'insert page break
    Selection.InsertBreak Type:=wdPageBreak

Next i
End Sub

或运行上面的文本生成代码,然后运行此表生成代码。两种方式的格式都不一致。这些文档上将没有其他文本,但是每页表格下方将放置一个图像。

1 个答案:

答案 0 :(得分:1)

问题是多种因素共同作用的结果:

  • 具有文本流格式的表。如果我将其设置为“ none”,则文本框将正确居中。
  • 如果定位范围不在表格中,则可以使用

然后,我测试了以下内容,并确定问题是由于激活了“单元格布局”(感谢屏幕截图,顺便说一句)。当我将其放入(见下文)时,文本框位于页面的中心,因为它的位置现在独立于表格。

With Shp
  .RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
  .Left = wdShapeCenter
  .RelativeVerticalPosition = wdRelativeVerticalPositionPage
  .Top = InchesToPoints(1.44)
  .LayoutInCell = False