Вставьте таблицу, закладки и страницы в середину документа Word - PullRequest
0 голосов
/ 15 апреля 2020

Следующий очень полезный код из @macropod (внизу) хорошо работает для вставки таблиц / закладок / разрывов страниц, созданных в Excel, в конец документа Word ( Как вставить таблицу и закладку в Word, по одному на страницу ). Я пытаюсь изменить код для вставки в середину оригинального двухстраничного документа, с одной таблицей на одной странице и второй таблицей на странице 2, а также несколькими пустыми абзацами и разрывом страницы между ними. В результате каждая новая комбинация закладок / таблиц итеративно вставляется в новую страницу между двумя исходными таблицами.

Dim wdApp As New Word.Document, wdDoc As Word.Document, wdRng As Word.Range, wdTbl As Word.Table
Dim d As Long, StrBkMk As String, datMin As Date, datMax As Date
datMin = "04/01/2020": datMax = "04/05/2020"

Set wdDoc = wdApp.Documents.Open("myFile")
With wdDoc
  For d = datMin To datMax
    StrBkMk = "D" & d
    Set wdRng = .Characters.Last
    With wdRng
      .Collapse wdCollapseStart
      .Text = CDate(d) 'Place Text in bookmark
      .Bookmarks.Add StrBkMk, .Duplicate
      .Collapse wdCollapseEnd
      .InsertBefore vbCr
      Set wdTbl = .Tables.Add(.Duplicate, 6, 5)  'Add table
      wdTbl.Range.Characters.Last.Next.InsertBefore Chr(12) 'Add pagebreak
    End With
  Next d
  .Characters.Last.Previous.Text = vbNullString
End With

Я пытался заменить:

    Set wdRng = .Characters.Last

на

   Set wdRng = .Characters.First
   Set wdRng = wdRng.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=(d - datMin + 2)) 

где (d - datMin + 2) - номер страницы, но это не работает. Он помещает первую таблицу / закладку / страницу в нужное место, но затем помещает последующие таблицы / закладки / разрывы страниц в конец документа, и они перекрывают друг друга. Есть идеи, что я делаю неправильно и как я могу это исправить?

1 Ответ

2 голосов
/ 15 апреля 2020

Смущает, оказывается, исправить это довольно легко.

Вместо того, что указано выше

Set wdRng = .Characters.Last

Это так же просто, как заменить на:

Set wdRng = .Paragraphs(2).Range

Или, что еще лучше, вставить разрыв раздела (Insert-> Break-> Тип разрыва раздела), куда вы хотите добавить материал (таблицы, закладки, разрывы страниц и т. Д. c). в середине документа, а затем используйте:

Set wdRng = .Sections(2).Range
. . . 
. . . 

И чтобы убедиться, что порядок вставок корректируется (не в обратном порядке), необходимо внести следующие изменения:

    Set Rng = .Sections((d - datMin) + 1).Range 'Go to next section each loop
    . . . 
    . . . 

    wdTbl.Range.Characters.Last.Next.InsertBreak wdSectionBreakNextPage  'To add pagebreak . . . instead of .InsertBefore Chr(12) as in original code


Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...