Как разместить один стол сразу за другим - PullRequest
0 голосов
/ 28 января 2019

Я создаю документ Word в VBA.Я добавляю таблицу строка за строкой;когда он будет завершен, я хочу вставить пустую строку / абзац, а затем начать новую таблицу.Но когда я добавляю абзац после таблицы, точка вставки появляется перед маркером абзаца, поэтому следующая таблица добавляется туда и становится частью первой таблицы.

Set HeaderTableId = WordDoc.Tables.Add(Range:=wrdSel.Range, numcolumns:=3, numrows:=1, AutoFitBehavior:=wdWord9TableBehavior)

Set RowId = HeaderTableId.Rows(1)
RowId.Cells(1) = LeftHeader
RowId.Cells(2).Range.Font.Bold = True
RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
RowId.Cells(2) = CentreHeader
RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
RowId.Cells(3) = RightHeader
' (this table only has one row)
With HeaderTableId.Range
    .Collapse (WdCollapseDirection.wdCollapseEnd)
    .Move Unit:=wdCharacter, Count:=3
    .Select
    .InsertParagraph
End With

Последний .InsertParagraph правильно вставляетпустой абзац после таблицы, но точка вставки находится перед маркером абзаца.Я также попытался вставить разрыв страницы, но у него та же проблема.Я не могу понять, как переместить точку вставки в конец.

1 Ответ

0 голосов
/ 28 января 2019

Мне пришлось «конкретизировать» ваш код, чтобы протестировать - я вставил весь тестовый код ниже.

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

Необходимо свернуть таблицу Range дважды : один раз до и один раз после вставки нового абзаца.

Код ввопрос использует .Move, что неясно, как изменяется Range.Если бы я использовал «движение», я бы пошел с .MoveStart, который будет держать свернутый диапазон свернутым, но для этой проблемы я предпочитаю Collapse.(Существует также MoveEnd, который расширит свернутый диапазон для включения содержимого.)

Что отличается в моей версии:

  • он использует «рабочий диапазон», который не зависит отлюбой диапазон таблицы - это личное предпочтение
  • , которое использует InsertAfter vbCr для вставки нового абзаца - опять же, личное предпочтение: я всегда знаю, что то, что вставлено, является частью объекта Range.Иногда при использовании методов вставки новое содержимое может не входить в Range, но я знаю , оно InsertAfter и InsertBefore

Код:

Sub InsertSuccessiveTables()
    Dim HeaderTableId As word.Table, nextTable As word.Table
    Dim RowId As word.Row
    Dim workRange As word.Range
    Dim WordDoc As word.Document

    Set WordDoc = ActiveDocument
    Set workRange = Selection.Range
    Set HeaderTableId = WordDoc.Tables.Add(Range:=workRange, numcolumns:=3, numrows:=1, AutoFitBehavior:=wdWord9TableBehavior)

    Set RowId = HeaderTableId.Rows(1)
    RowId.Cells(1).Range.text = "Left"
    RowId.Cells(2).Range.Font.Bold = True
    RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
    RowId.Cells(2).Range.text = "Center"
    RowId.Cells(3).Range.ParagraphFormat.Alignment = wdAlignParagraphRight
    RowId.Cells(3).Range.text = "Right"
    ' (this table only has one row)
    Set workRange = HeaderTableId.Range
    With workRange
        .Collapse WdCollapseDirection.wdCollapseEnd
        .InsertAfter vbCr 'ANSI 13
        .Collapse WdCollapseDirection.wdCollapseEnd
    End With
    Set nextTable = workRange.Tables.Add(workRange, 1, 4, AutoFitBehavior:=wdWord9TableBehavior)
End Sub
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...