
You can copy and paste tables from word to excel as it is. Its easy. However, if you are using VBA to automate your Excel job, then I am sure this example would come in handy.
Microsoft provides Table object (for word) in VBA, which has a collection of methods and properties with which you to read and extract data from multiple tables in a word doc, from Excel.
Let's see the example now.
First, create a word document (.doc or .docx) and draw a table. Add few rows to it. Make the first row as header. You can draw multiple tables in your word file. Save the file.
Now, open your Excel file and save the file in ".xlsx" format. Add a button, an ActiveX button control, in your worksheet (Sheet1).
Press Alt+F11 to open the VBA editor. You can also right click sheet1 and choose "View Code" option. Add Office Object Library Reference to your application.

Write the below code inside the CommandButton1_Click() event.
Option Explicit
Private Sub CommandButton1_Click()
copyTableDataFromWord
End Sub
Public Sub copyTableDataFromWord()
On Error Resume Next
' Create a "FileDialog" object as a File Picker dialog box.
Dim fd As Office.FileDialog
Set fd = Application.FileDialog(msoFileDialogFilePicker)
Dim sfileName As String
With fd
.AllowMultiSelect = False
.Filters.Clear
.Title = "Select a Word File"
.Filters.Add "All Word Documents", "*.doc?", 1
If .Show = True Then
sfileName = Dir(.SelectedItems(1)) ' Get the file.
End If
End With
Application.ScreenUpdating = False
Application.DisplayAlerts = False
If Trim(sfileName) <> "" Then
Dim objWord As Object ' Create a Word object.
Set objWord = CreateObject("Word.Application")
objWord.Visible = False ' Do not show the file.
' Create a Document object and open the Word file.
Dim objDoc
Set objDoc = objWord.Documents.Open(fd.InitialFileName & sfileName)
Dim iTable ' The table that you want to extract data.
iTable = 1 ' Set value as 2 or 3 for second or third table (if any).
' Note: If you have multiple tables in your word file,
' use "objDoc.tables.Count" to get the total tables in the file
' and loop through each table.
If objDoc.tables(iTable).Columns.Count > 0 Then ' Check if it’s a table.
Dim iTotalCols As Integer ' Get total columns in the table.
iTotalCols = objDoc.tables(iTable).Columns.Count
Dim iTotalRows As Integer ' Get total rows in the table.
iTotalRows = objDoc.tables(iTable).Rows.Count
Dim iRows, iCols As Integer
Dim txt As Variant
' Get the table headers first.
For iCols = 1 To objDoc.tables(iTable).Columns.Count
txt = objDoc.tables(iTable).cell(1, iCols).Range.Text
With Sheet1
.Cells(1, iCols) = Replace(txt, " ", "") ' Write the headers in sheet1.
.Cells(1, iCols).Font.Bold = True
End With
Next iCols
' Now extract the table data.
For iRows = 2 To iTotalRows
For iCols = 1 To iTotalCols
txt = objDoc.tables(iTable).cell(iRows, iCols).Range.Text
Sheet1.Cells(iRows, iCols) = Replace(txt, " ", "") ' Show data in sheet1.
Next iCols
Next iRows
End If
' Add borders to the table.
Sheet1.UsedRange.Borders.LineStyle = xlContinuous
End If
Application.ScreenUpdating = True
Application.DisplayAlerts = True
' Clean up.
objWord.Close
objDoc.Quit
Set objWord = Nothing
Set objDoc = Nothing
End SubI am using the FileDialog object in the procedure to select the word file. After getting access to the word file, I am creating twoobject, "word" and "doc", to open and read the contents in the file. The word doc will remain invisible.
objWord.Visible = False ' Do not show the file.
The tables() method of Table object, will allow us read the doc’s table data. The method takes one parameter as "index", a number, which will return a single table object.
tables(index)
You can define the index values like 1, 2, 3 etc. depending upon the number of tables you want to read and extract data from. However, If you have multiple tables in your word file, and don’t want to add indexes manually, you can use objDoc.tables.Count to get the total tables in the file and loop through each table.
After writing the data to the Excel worksheet, I am just drawing borders around the columns and rows.
Sheet1.UsedRange.Borders.LineStyle = xlContinuous ' Add borders to the table.
