Центрированное текстовое поле на каждой странице в Word - PullRequest
0 голосов
/ 26 июня 2018

Поэтому я пытаюсь написать код, который добавляет текстовое поле над таблицей на каждой странице в текстовом документе. Это текстовое поле должно быть центрировано для выравнивания с таблицей (у меня нет проблем при создании центрированной таблицы на каждой странице). Я только недавно начал работать в 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

Вывод работает для первых двух страниц, но на 3-й странице выравнивание текстового поля не центрируется. Я проверил расположение, и текстовое поле все еще говорит, что оно центрировано относительно страницы, хотя это не так.

Код работает должным образом, пока таблицы не вставлены, но таблица, генерирующая код, если запустить после этой таблицы, не помещает таблицы на ту же страницу, что и текстовые поля.

Это третья страница моего документа, где все начинает идти не так, как надо. Текстовое поле должно располагаться над таблицей и выравниваться по центру.

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 голосов
/ 26 июня 2018

Проблема заключается в совокупности факторов:

  • таблица с форматированием потока текста. Если я установлю это в "none", текстовое поле будет центрировано правильно.
  • если диапазон привязки находится вне таблицы, он работает

Затем я проверил следующее и определил, что проблема в том, что «Макет в ячейке» активирован (спасибо за снимок экрана, кстати). Когда я добавляю это (см. Ниже), текстовое поле центрируется на странице, потому что его расположение теперь не зависит от таблицы.

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