Word VBA: Copy tables from one document to another.

rrhandle8
rrhandle8 used Ask the Experts™
on
The code below does copy the tables to a new document, but they end up as nested tables.  In the original document, there are 3 paragraphs between the two tables.  How can I unselect the first table after I post it in the new document, add a paragraph after the table, and then paste the second table?

Sub ExtractTablesFromOneDoc()
  Dim objTable As Table
  Dim objDoc As Document
  Dim objNewDoc As Document
  Dim objRange As Range
  Dim o As Paragraph
 
  Set objDoc = ActiveDocument
  Set objNewDoc = Documents.Add
 
  For Each objTable In objDoc.Tables
    objTable.Range.Select
    Debug.Print objTable.Title
    Selection.Copy
 
    '  Paste tables to new document in rich text format.
    Set objRange = objNewDoc.Range
    objRange.Collapse Direction:=wdCollapseEnd
    objRange.PasteSpecial DataType:=wdPasteRTF
    objRange.Collapse Direction:=wdCollapseEnd
  Next objTable
 
End Sub

Open in new window

Comment
Watch Question

Do more with

Expert Office
EXPERT OFFICE® is a registered trademark of EXPERTS EXCHANGE®
NorieAnalyst Assistant

Commented:
Add     objRange.InsertParagraphAfter before the Next.
 
  For Each objTable In objDoc.Tables
    objTable.Range.Select
    Debug.Print objTable.Title
    Selection.Copy
 
    '  Paste tables to new document in rich text format.
    Set objRange = objNewDoc.Range
    objRange.Collapse Direction:=wdCollapseEnd
    objRange.PasteSpecial DataType:=wdPasteRTF
    objRange.Collapse Direction:=wdCollapseEnd

    objRange.InsertParagraphAfter

  Next objTable

Open in new window

Author

Commented:
Norie, that did not work.
NorieAnalyst Assistant

Commented:
It definitely works for me, how exactly are the tables in the original document arranged?

Could you attach a sample document?
OWASP Proactive Controls

Learn the most important control and control categories that every architect and developer should include in their projects.

Author

Commented:
Table1.docx has the two tables
Table_Controller.docm has the code.
Table1.docx
Table_Controller.docm
NorieAnalyst Assistant

Commented:
What I suggested does seem to be pasting the table separately to the new document but it appears to be placing them on top of each other.

I've tried a few things but the only way I've managed to separate the tables in the new document is to insert a page break between them, which I don' think is ideal.

How do you want the copied tables to appear in the new document?

Author

Commented:
With a paragraph between them.
Top Expert 2016
Commented:
Hi,

pls try
Sub ExtractTablesFromOneDoc()
  Dim objTable As Table
  Dim objDoc As Document
  Dim objNewDoc As Document
  Dim objRange As Range
  Dim o As Paragraph
 
  Set objDoc = ActiveDocument
  Set objNewDoc = Documents.Add
 
  For Each objTable In objDoc.Tables
    objTable.Range.Select
    Debug.Print objTable.Title
    Selection.Copy
 
    '  Paste tables to new document in rich text format.
    Set objRange = objNewDoc.Range
    objRange.Collapse Direction:=wdCollapseEnd
    objRange.PasteSpecial DataType:=wdPasteRTF
    objRange.Tables(1).Rows.WrapAroundText = False
    objRange.Collapse Direction:=wdCollapseEnd

    objRange.InsertParagraphAfter
  Next objTable
' optional
'  For Each objTable In objNewDoc.Tables
'    objTable.Rows.WrapAroundText = True
'  Next objTable
End Sub

Open in new window

Regards

Author

Commented:
Rgonzo1971, that worked.  One note, the document with the original tables has to be the active document.

Do more with

Expert Office
Submit tech questions to Ask the Experts™ at any time to receive solutions, advice, and new ideas from leading industry professionals.

Start 7-Day Free Trial