Мне пришлось «конкретизировать» ваш код, чтобы протестировать - я вставил весь тестовый код ниже.
Ключ для вставки второй таблицы, следующей за первой, разделенной знаком абзаца дляубедитесь, что две таблицы не объединены:
Необходимо свернуть таблицу 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