因此,我试图编写一个代码,以在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
输出适用于前两页,但在第三页上,文本框的对齐方式未居中。我检查了位置,并且文本框仍然说它相对于页面居中,即使它不在页面中。
只要不插入表格,代码就可以正常工作,但是如果表格生成代码在此之后运行,则不会将表格与文本框放在同一页面上。
这是我文档的第三页,那里开始出现问题。文本框应放置在桌子上方并居中对齐。
为了重现文档,请创建一个空白文档并运行此表生成代码:
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
或运行上面的文本生成代码,然后运行此表生成代码。两种方式的格式都不一致。这些文档上将没有其他文本,但是每页表格下方将放置一个图像。
答案 0 :(得分:1)
问题是多种因素共同作用的结果:
然后,我测试了以下内容,并确定问题是由于激活了“单元格布局”(感谢屏幕截图,顺便说一句)。当我将其放入(见下文)时,文本框位于页面的中心,因为它的位置现在独立于表格。
With Shp
.RelativeHorizontalPosition = wdRelativeHorizontalPositionPage
.Left = wdShapeCenter
.RelativeVerticalPosition = wdRelativeVerticalPositionPage
.Top = InchesToPoints(1.44)
.LayoutInCell = False