Копировать таблицы вставки из Excel в слово, включая разрыв строки, но использовать только Excel VBA - PullRequest
0 голосов
/ 18 февраля 2020

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

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

Все найденные мной варианты относятся к слову, но я не хочу использовать слово. Я хочу ввести разрыв строки в слове после таблицы, используя Excel VBA.

Может кто-нибудь помочь мне с этим? Есть ли способ переместить курсор или ввести разрыв строки после вставки таблицы?

Код выглядит следующим образом:

WSout.Cells(2, 5).Copy
With myDoc.ActiveWindow.Selection
 .EndOf Unit:=wdStory, Extend:=wdMove
 .TypeParagraph
 '.TypeText (str)
 .TypeParagraph
End With
myDoc.Paragraphs(ba).Range.PasteSpecial xlPasteValues

'For Table 1
ba = 1 + ba

WSout.Range("N1:O22").Copy
myDoc.Paragraphs(ba).Range.PasteAndFormat wdFormatOriginalFormatting

myDoc.Application.Selection.MoveDown Unit:=wdLine, Count:=23

'WordApp.Selection.MoveDown Unit:=wdLine, Count:=23

'For Table 2

ba = 1 + ba

lastrow = "0"
lastcol = "22"

For bb = 2 To WSout.Range("Q" & Rows.Count).End(xlUp).Row

lastrow = 1 + lastrow

Next bb

WSout.Range("Q1", WSout.Cells(lastrow, lastcol)).Copy
myDoc.Paragraphs(ba).Range.PasteAndFormat wdFormatOriginalFormatting

Ответы [ 2 ]

0 голосов
/ 18 февраля 2020

Вы перемещаете выделение, но затем вторая вставка повторяет первую, поэтому она вставляется точно в то же место. Эти строки -

  WSout.Range("Q1", WSout.Cells(lastrow, lastcol)).Copy
  myDoc.Paragraphs(ba).Range.PasteAndFormat wdFormatOriginalFormatting

Должно быть что-то вроде

    WSout.Range("Q1", WSout.Cells(lastrow, lastcol)).Copy
    myDoc.selection.Range.PasteAndFormat wdFormatOriginalFormatting

Я говорю что-то вроде, потому что я на своем телефоне и не могу проверить это

0 голосов
/ 18 февраля 2020

Проблема в том, что «ba = 1 + ba» с «myDo c .Paragraphs (ba) .Range» указывает только на второй логический абзац в исходном выделении - вы не обновили «ba» для соответствия Блок выбора.Перемещение: = wdLine, счетчик: = 23. В любом случае, работа с объектами Selection неэффективна; Вы должны использовать объекты Range вместо этого. Попробуйте что-то вроде:

With myDoc.Range
  .InsertAfter vbCr & WSout.Cells(2, 5).Text & vbCr
  WSout.Range("N1:O22").Copy
  .Characters.Last.PasteAndFormat wdFormatOriginalFormatting
  .InsertAfter vbCr
  With WSout
    .Range("Q1:V" & .Range("Q" & Rows.Count).End(xlUp).Row).Copy
  End With
  .Characters.Last.PasteAndFormat wdFormatOriginalFormatting
End With
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...