Вставить до того, как таблица вводит текст в начале документа - PullRequest
0 голосов
/ 06 марта 2020

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

Dim objword
Dim objdoc
Dim Selection As Excel.Range
Dim WordTable


'Optimize Code
  Application.ScreenUpdating = False
  Application.EnableEvents = False

'Create Word Doc with Thin Margins
    Set objword = CreateObject("Word.Application")
    Set objdoc = objword.Documents.Add
objword.Visible = True
objdoc.PageSetup.TopMargin = Application.CentimetersToPoints(1.27)
objdoc.PageSetup.BottomMargin = Application.CentimetersToPoints(1.27)
objdoc.PageSetup.LeftMargin = Application.CentimetersToPoints(1.27)
objdoc.PageSetup.RightMargin = Application.CentimetersToPoints(1.27)
    objword.Activate


'Transactions
 If WorksheetFunction.CountA(Range("Transactions")) >= 1 Then

Set Selection = ThisWorkbook.Worksheets("TF_Flags").ListObjects("Transactions").Range
   Selection.Copy

'Paste Table into MS Word
objdoc.Paragraphs.Add
objdoc.Paragraphs.Last.Range.PasteExcelTable _
  LinkedToExcel:=False, _
  WordFormatting:=False, _
  RTF:=False

'enter start and end lines for table
objdoc.Content.InsertBefore Text:=" Transactions start."
 objdoc.Content.InsertAfter Text:=" Transactions end."

'Autofit Table so it fits inside Word Document
objword.ActiveDocument.Tables(1).AutoFitBehavior (2)

'add small delay
Application.Wait (Now + TimeValue("0:00:02"))

'Clear The Clipboard
  Application.CutCopyMode = False

   End If

'Notes
 If WorksheetFunction.CountA(Range("Notes")) >= 1 Then

Set Selection = ThisWorkbook.Worksheets("TF_Flags").ListObjects("Notes").Range
   Selection.Copy

 'Paste Table into MS Word
objdoc.Paragraphs.Add

objdoc.Paragraphs.Last.Range.PasteExcelTable _
  LinkedToExcel:=False, _
  WordFormatting:=False, _
  RTF:=False

'enter start and end lines for table
 objdoc.Content.InsertBefore Text:=" Notes start."
 objdoc.Content.InsertAfter Text:=" Notes end."


'Autofit Table so it fits inside Word Document
objword.ActiveDocument.Tables(1).AutoFitBehavior (2)

Application.Wait (Now + TimeValue("0:00:02"))

'Clear The Clipboard
  Application.CutCopyMode = False

   End If
End Sub

1 Ответ

0 голосов
/ 06 марта 2020

Все ваши начальные тексты находятся в начале документа, потому что вы использовали objdoc.Content.InsertBefore. objdoc.Content - это range, представляющий все содержимое документа.

Это упростит вам задачу, если вы поменяете порядок добавления вещей. Поскольку вы, очевидно, знаете, какой текст должен предшествовать / следовать за каждой таблицей, сделайте вставки в таком порядке, то есть

  1. Вставьте предыдущий текст
  2. Вставьте в свою таблицу
  3. Вставьте следующий текст

Как вы увидите из приведенного ниже кода, добавление контента по мере того, как вы go упрощаете работу.

ПРИМЕЧАНИЯ:

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

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

  'Transactions
  If WorksheetFunction.CountA(Range("Transactions")) >= 1 Then

    Set Selection = ThisWorkbook.Worksheets("TF_Flags").ListObjects("Transactions").Range
    Selection.Copy

    'enter start line for table and add new para for table
    objdoc.Paragraphs(1).Range.Text = " Transactions start."
    objdoc.Paragraphs.Add
    'Paste Table into MS Word
    objdoc.Paragraphs.Last.Range.PasteExcelTable _
      LinkedToExcel:=False, _
      WordFormatting:=False, _
      RTF:=False

    'enter end line for table
    objdoc.Paragraphs.Last.Range.Text = " Transactions end."

    'Autofit Table so it fits inside Word Document
    objword.ActiveDocument.Tables(1).AutoFitBehavior (2)

    'add small delay
    Application.Wait (Now + TimeValue("0:00:02"))

    'Clear The Clipboard
    Application.CutCopyMode = False

  End If

  'Notes
  If WorksheetFunction.CountA(Range("Notes")) >= 1 Then

    Set Selection = ThisWorkbook.Worksheets("TF_Flags").ListObjects("Notes").Range
    Selection.Copy
    'add an empty para as a separator
    objdoc.Paragraphs.Add
    'add another para and enter start line for table
    objdoc.Paragraphs.Add
    objdoc.Paragraphs.Last.Range.Text = " Notes start."
    'Paste Table into MS Word
    objdoc.Paragraphs.Last.Range.PasteExcelTable _
      LinkedToExcel:=False, _
      WordFormatting:=False, _
      RTF:=False

    'enter end line for table
    objdoc.Paragraphs.Last.Range.Text = " Notes end."

    'Autofit Table so it fits inside Word Document
    objword.ActiveDocument.Tables(2).AutoFitBehavior (2)

    Application.Wait (Now + TimeValue("0:00:02"))

    'Clear The Clipboard
    Application.CutCopyMode = False

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