Скопируйте и вставьте несколько вложенных таблиц в определенную ячейку таблицы Word - PullRequest
1 голос
/ 28 июня 2019

Я использовал WordEditor для создания таблицы в шаблоне Outlook и планирую скопировать и вставить несколько диапазонов из книги Excel в виде вложенной таблицы в определенную ячейку этой таблицы - идея заключается в том, что каждый раз новая таблицавставляется в эту ячейку, все существующие таблицы отталкиваются (я могу выяснить расположение таблиц на более позднем этапе).

Я намерен использовать закладки для вставки диапазонов, но я не знакомс нотацией и мне трудно найти какую-либо соответствующую документацию в Интернете

Dim wdDoc As Word.Document
Dim ws_sum, ws As Worksheet
Dim tblSess As Word.Table
......

......
With ws_sum
    wdDoc.Bookmarks.Add Name:="tab", Range:=tblSess.cell(2, 1).Range
    .Range(.Cells(9, 3), .Cells(12, 7)).Copy
    wdDoc.Bookmarks("tab").Range.PasteAsNestedTable
    .Range(.Cells(24, 2), .Cells(31, 10)).Copy
    wdDoc.Bookmarks("tab").Range.PasteAsNestedTable
......
End With

Проблема, с которой я сталкиваюсь, заключается в том, что в настоящее время каждый раз, когда я вставляю новую вложенную таблицу, она полностью удаляет содержимое закладкиклетка.Я попытался указать первую запись в ячейке, заменив Range: = tblSess.cell (2, 1) .Range на Range: = tblSess.cell (2, 1) .Range (0,0) ', но выбрасываетошибка при запуске.Есть ли другой способ сделать это?

1 Ответ

0 голосов
/ 28 июня 2019

Конечно, есть несколько способов приблизиться к этому.Ключ в любом случае -

  • . Убедитесь, что в начале ячейки есть пустой знак абзаца.Это дает возможность вернуться к следующей вставке, чтобы она не оказалась вложенной в другую вставленную таблицу.
  • Используйте Range объекты.Я предпочитаю два: один для начала ячейки, другой для цели вставки.

Следующий фрагмент кода, основанный на коде в вопросе, иллюстрирует:

Dim rngCellStart As Word.Range, rngTarget As Word.Range

Set rngTarget = tblSess.Cell(2, 1).Range
rngTarget.Collapse wdCollapseStart
Set rngCellStart = rngTarget.Duplicate

'put a paragraph mark before the table that is pasted
rngTarget.InsertBefore vbCr
'Move the target Range to leave out that paragraph
rngTarget.MoveStart wdCharacter, 1

'may no longer be needed... but could be used to mark
'the starting point of the cell as that is where it stays
'wdDoc.Bookmarks.Add Name:="tab", Range:=rngCellStart

.Range(.Cells(9, 3), .Cells(12, 7)).Copy
rngTarget.PasteAsNestedTable

'Following paste actions for additional tables.
'Could be put in a separate procedure and called in a loop
rngCellStart.InsertBefore vbCr
Set rngTarget = rngCellStart.Duplicate
rngTarget.Collapse wdCollapseEnd
.Range(.Cells(24, 2), .Cells(31, 10)).Copy
rngTarget.PasteAsNestedTable
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...