View Single Post
  #4   Report Post  
Posted to microsoft.public.word.tables
Jezebel Jezebel is offline
external usenet poster
 
Posts: 1,384
Default macro to detect merged table cells?

The reason for the error is that Merge is a method, not a property: it's how
you merge cells, not how you report if they are merged.

The logic gets a bit hairy, but try iterating the cells and tracking the
..RowIndex .ColumnIndex properties. If the last .ColumnIndex value in the row
is less than the maximum, that row contains merged cells. Bear in mind that
the internal mechanism of Word tables has changed significantly at least
twice over the last few versions of Word (and still doesn't work properly).
Apart from merged cells, there's also the possibility of split cells.

Don't iterate the rows: if the table has vertically merged cells, this may
throw an error.

For each oCell in oTable.Cells
...

It's not obvious that the identity of the merged cells is significant
anyway. Try this: create a table with five columns and four rows. In row 1,
merge cells 1 and 2; in row 2 merge cells 2 and 3, row 3: 3 and 4, row 4: 4
and 5. Now re-align the cell boundaries. Do you have a 4 x 4 table, or a 5 x
4 table with a merged cell in each row?






"Tony Logan" wrote in message
...
I'm wondering if there's a way to detect merged table cells.

As a test, I wrote the below code, wanting to examine each table in a
document, then examine each cell. If I found a merged cell, I wanted to
change the cell color to blue and display a message box stating "Merged
cell." If the cell was not a merged cell, I wanted to change the cell
color
to red and display a message box stating "No merge detected."

However, the code errors at this line:
If oCell.Merge = True Then

The error indicates that Merge is not an optional argument.

I'm not sure if there's a way to detect merged cells in this manner.
Here's
all the code:

Sub FindMergedCells()

Dim oTable As Table
Dim orow As Row
Dim i As Integer
Dim oCell As Cell

For Each oTable In ActiveDocument.Tables
For Each orow In oTable.Rows
For Each oCell In orow.Cells
If oCell.Merge = True Then ' ** code errors here **
oCell.Shading.BackgroundPatternColor = wdColorBlue
MsgBox "Merged cell."
Else
oCell.Shading.BackgroundPatternColor = wdColorRed
MsgBox "No merge detected."
Next oCell

Next orow
Next oTable

End Sub