ExternalUse
ExternalUse

Reputation: 2075

Adding a row to a table using a template row

I've got a table in a word document which I'm trying to add a row to. This additional row needs to be the same as the first row in the table which serves as a template.

Let's assume my table has exactly one row to begin with. I would now like to add a new row with the same specifications, then merge all 3 columns. Under that I would like to add an additional row, but with 3 columns again like the first row. What I tried:

Dim oTemplateRow As Word.Row
Set oTemplateRow = oTable.Rows(1)
oTemplateRow.Range.Copy
' adds a row like the template one
oTable.Rows.Last.Range.Paste

So far, so good. But if I now merge the cells in that line and then repeat the paste, the new line appears before the previously added one, even with a collapse of the range before - this is what I do not understand.

oTable.Rows.Last.Cells.Merge
oTable.Rows.Last.Range.Collapse Direction:=wdCollapseEnd  
oTable.Rows.Last.Range.Paste
oTable.Rows.Last.Range.Collapse Direction:=wdCollapseEnd

Any help would be greatly appreciated.

Upvotes: 1

Views: 7565

Answers (1)

ExternalUse
ExternalUse

Reputation: 2075

It appears that I am now able to answer my own question. Although it may not be the most elegant solution, it solves my problem. I have simply used oTable.Rows.Add after the initial row had been created, therefore creating an exact copy underneath. When I need to add a row, I repeat that process and keep working on the one previous to the last one.

Private Function addRow(ByRef oRow As Word.Row, Optional iNumberColumns As Integer = 3)
    ' add a row to the end, then work on the one before that
    oTable.Rows.Add
    Set oRow = oTable.Rows(oTable.Rows.Count - 1)
    ' if number of columns is 1 merge 2 to 4, if 2 merge 3 to 4
    Select Case iNumberColumns
        Case 1
            oRow.Cells(2).Merge MergeTo:=oRow.Cells(4)
        Case 2
            oRow.Cells(3).Merge MergeTo:=oRow.Cells(4)
    End Select
End Function

May be a bit longwinded, but works for me. Regards Stefan

Upvotes: 2

Related Questions