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

У меня есть документ Word, который начинается с одной таблицы на первой странице, а затем, в зависимости от данных в файле Excel, я хочу начать вставку таблиц на последующих страницах, а перед каждой таблицей я хочу вставить текст реклама или подпись. Я использую закладку, чтобы вставить этот текст. После вставки таблицы я хочу добавить разрыв страницы, чтобы я мог начать следующую вставку таблицы на следующей странице.

Результат, полученный из приведенного ниже кода, размещает таблицы и закладки в неправильном порядке, на случайных, казалось бы, случайных страницах и, казалось бы, в случайном порядке, а таблицы не имеют правильного размера (не 6X5, как должно быть, а как-то 3x3). Как я могу контролировать таблицы, закладки и разрывы страниц, чтобы правильно упорядочить документ?

'FROM EXCEL
Dim wd as New Word.Document
Dim doc as Word.Document
Dim Rng as Range
Dim d as Variant
dim datMin, datMax as Date
datMin = "04/01/2020"
datMax = "04/05/2020"

Set doc = wd.Documents.Open("myFile")
Set Rng = doc.Range(0, 0)
For d = datMin To datMax
    Set Rng = Rng.GoTo(What:=wdGoToPage, Which:=wdGoToAbsolute, Count:=(d - datMin + 2)) 'Go to top of page
    doc.Bookmarks.Add "D" & d - datMin + 2, Rng  'BOOKMARK NAMES ARE "D2", "D3", etc.
    Rng.Bookmarks("D" & d - datMin + 2).Range.Text = d   'Place Text in bookmark
    doc.Tables.Add Rng, 6, 5  'Add table
    Rng.InsertBreak wdPageBreak  'Add pagebreak
Next d

1 Ответ

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

Ваше безоговорочное использование «Dim Rng as Range» подразумевает код, который вы ссылаетесь на диапазон Excel. Попробуйте:

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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...