Working with Tables

Word Developer Reference

This topic includes Microsoft Visual Basic examples related to the following tasks:

  • Creating a table, inserting text, and applying formatting
  • Inserting text into a table cell
  • Returning text from a table cell without returning the end of cell marker
  • Converting text to a table
  • Returning the contents of each table cell
  • Copying all tables in the active document into a new document

Creating a table, inserting text, and applying formatting

The following example inserts a four-column, three-row table at the beginning of the active document. The For Each...Next structure is used to step through each cell in the table. Within the For Each...Next structure, the InsertAfter method of the Range object is used to add text to the table cells (Cell 1, Cell 2, and so on).

  Sub CreateNewTable()
    Dim docActive As Document
    Dim tblNew As Table
    Dim celTable As Cell
    Dim intCount As Integer
Set docActive = ActiveDocument
Set tblNew = docActive.Tables.Add( _
    Range:=docActive.Range(Start:=0, End:=0), NumRows:=3, _
    NumColumns:=4)
intCount = 1

For Each celTable In tblNew.Range.Cells
    celTable.Range.InsertAfter "Cell " & intCount
    intCount = intCount + 1
Next celTable

tblNew.AutoFormat Format:=wdTableFormatColorful2, _
    ApplyBorders:=True, ApplyFont:=True, ApplyColor:=True

End Sub

Inserting text into a table cell

The following example inserts text into the first cell of the first table in the active document. The Cell method returns a single Cell object. The Range property returns a Range object. The Delete method is used to delete the existing text and the InsertAfter method inserts the "Cell 1,1" text.

  Sub InsertTextInCell()
    If ActiveDocument.Tables.Count >= 1 Then
        With ActiveDocument.Tables(1).Cell(Row:=1, Column:=1).Range
            .Delete
            .InsertAfter Text:="Cell 1,1"
        End With
    End If
End Sub

Returning text from a table cell without returning the end of cell marker

The following example returns and displays the contents of each cell in the first row of the first document table.

  Sub ReturnTableText()
    Dim tblOne As Table
    Dim celTable As Cell
    Dim rngTable As Range
Set tblOne = ActiveDocument.Tables(1)
For Each celTable In tblOne.Rows(1).Cells
    Set rngTable = ActiveDocument.Range(Start:=celTable.Range.Start, _
        End:=celTable.Range.End - 1)
    MsgBox rngTable.Text
Next celTable

End Sub

  Sub ReturnCellText()
    Dim tblOne As Table
    Dim celTable As Cell
    Dim rngTable As Range
Set tblOne = ActiveDocument.Tables(1)
For Each celTable In tblOne.Rows(1).Cells
    Set rngTable = celTable.Range
    rngTable.MoveEnd Unit:=wdCharacter, Count:=-1
    MsgBox rngTable.Text
Next celTable

End Sub

Converting existing text to a table

The following example inserts tab-delimited text at the beginning of the active document and then converts the text to a table.

  Sub ConvertExistingText()
    With Documents.Add.Content
        .InsertBefore "one" & vbTab & "two" & vbTab & "three" & vbCr
        .ConvertToTable Separator:=Chr(9), NumRows:=1, NumColumns:=3
    End With
End Sub

Returning the contents of each table cell

The following example defines an array equal to the number of cells in the first document table (assuming Option Base 1). The For Each...Next structure is used to return the contents of each table cell and assign the text to the corresponding array element.

  Sub ReturnCellContentsToArray()
    Dim intCells As Integer
    Dim celTable As Cell
    Dim strCells() As String
    Dim intCount As Integer
    Dim rngText As Range
If ActiveDocument.Tables.Count >= 1 Then
    With ActiveDocument.Tables(1).Range
        intCells = .Cells.Count
        ReDim strCells(intCells)
        intCount = 1
        For Each celTable In .Cells
            Set rngText = celTable.Range
            rngText.MoveEnd Unit:=wdCharacter, Count:=-1
            strCells(intCount) = rngText
            intCount = intCount + 1
        Next celTable
    End With
End If

End Sub

Copying all tables in the active document into a new document

This example copies the tables from the current document into a new document.

  Sub CopyTablesToNewDoc()
    Dim docOld As Document
    Dim rngDoc As Range
    Dim tblDoc As Table
If ActiveDocument.Tables.Count >= 1 Then
    Set docOld = ActiveDocument
    Set rngDoc = Documents.Add.Range(Start:=0, End:=0)
    For Each tblDoc In docOld.Tables
        tblDoc.Range.Copy
        With rngDoc
            .Paste
            .Collapse Direction:=wdCollapseEnd
            .InsertParagraphAfter
            .Collapse Direction:=wdCollapseEnd
        End With
    Next
End If

End Sub