Splitting Tables

J

jpreman

Thank you for reading this post.

I know it is possible to split a table horizontally. Is there a way a table
could be split vertically?
 
S

Stefan Blom

No, there is no "split table vertically" command in Word. But you can
use cut and paste to create a separate table out of selected columns
(or selected cells). Then paste at the location where you want the
table. Note that there must be at least two paragraph marks (¶)
between the location where you are pasting and the original table;
otherwise, the two tables will merge horizontally as you paste.

If you want the new table beside the old one, do the following to wrap
it: Choose Table | Table Properties. Click the Table tab, and choose
"Around" at "Text wrapping." Use the Options dialog box (click the
Options button) to position the table or drag it with the mouse.

Alternatively, you can create the illusion of a "vertically split"
table: Just insert a new column at the "break point" and remove the
horizontal borders of that column.

--
Stefan Blom
Microsoft Word MVP


in message
news:[email protected]...
 
M

macropod

Hi jpreman,

If you need to split a table because you've changed the page size and the
table's now too wide, I have a macro I've coded to deal with that. It isn't
coded to handle tables with cells merged across columns, and is designed to
replicate the left-most column for each new table. If that's what you're
trying to achieve, let me know and I'll post the code.

Cheers
 
J

jpreman

Hi macropod,

Thanks for your response.

Though it was not my immediate issue, I have faced what you have referred at
many a times. I am sure the macro you have will be of much use to me.



macropod said:
Hi jpreman,

If you need to split a table because you've changed the page size and the
table's now too wide, I have a macro I've coded to deal with that. It isn't
coded to handle tables with cells merged across columns, and is designed to
replicate the left-most column for each new table. If that's what you're
trying to achieve, let me know and I'll post the code.

Cheers

--
macropod
[MVP - Microsoft Word]


jpreman said:
Thank you for reading this post.

I know it is possible to split a table horizontally. Is there a way a table
could be split vertically?
 
M

macropod

Hi jpreman,

The following macro vertically splits all tables in a document that exceed
the horizontal print margins, replicating the first column along the way.
Single-column and two-column tables, including any generated by the split
process, are ignored. Note the 6 lines marked with an '*'. You can delete
these if column 1 is not to be replicated.

You may have to fix the odd line that gets wrapped where it shouldn't as a
result of the posting, but that shouldn't be too difficult.

Sub TableSplit()
Application.ScreenUpdating = False
Dim oLeftMargin As Single, oRightMargin As Single, oGutter As Single
Dim oPageWidth As Single, oPrintWidth As Single, oTableWidth As Single
Dim oTable, oCounter As Integer, i As Integer, j As Integer
If ActiveDocument.Tables.Count = 0 Then Exit Sub
With ActiveDocument.PageSetup
oLeftMargin = .LeftMargin
oRightMargin = .RightMargin
oGutter = .Gutter
oPageWidth = .PageWidth
End With
oPrintWidth = oPageWidth - oLeftMargin - oRightMargin - oGutter
oCounter = 1
Restart:
For j = oCounter To ActiveDocument.Tables.Count
oTable = ActiveDocument.Tables(j)
With ActiveDocument.Tables(j)
.AllowAutoFit = False
.PreferredWidth = 0
End With
oTableWidth = 0
If oTable.Columns.Count < 3 Then GoTo SkipTable
For i = 1 To oTable.Columns.Count
oTableWidth = oTableWidth + oTable.Columns(i).Width
If oTableWidth > oPrintWidth Then
oTableWidth = oTableWidth - oTable.Columns(i).Width
oTable.Columns(i).Select
With Selection
.MoveRight Unit:=wdCharacter, Count:=oTable.Columns.Count - i + 1,
Extend:=wdExtend
.Copy
.Columns.Delete
.MoveDown Unit:=wdLine, Count:=oTable.Rows.Count
.InsertParagraph
.MoveDown Unit:=wdLine, Count:=1
.Paste
End With
oCounter = j
'Delete the next 6 lines (marked '*) if column 1 is not to be
replicated
oTable.Columns(1).Select '*
With Selection '*
.Copy '*
.MoveDown Unit:=wdLine, Count:=2'*
.Paste '*
End With '*
GoTo Restart
End If
Next
SkipTable:
Next
Application.ScreenUpdating = True
End Sub

Cheers

--
macropod
[MVP - Microsoft Word]


jpreman said:
Hi macropod,

Thanks for your response.

Though it was not my immediate issue, I have faced what you have referred at
many a times. I am sure the macro you have will be of much use to me.



macropod said:
Hi jpreman,

If you need to split a table because you've changed the page size and the
table's now too wide, I have a macro I've coded to deal with that. It isn't
coded to handle tables with cells merged across columns, and is designed to
replicate the left-most column for each new table. If that's what you're
trying to achieve, let me know and I'll post the code.

Cheers

--
macropod
[MVP - Microsoft Word]


jpreman said:
Thank you for reading this post.

I know it is possible to split a table horizontally. Is there a way a table
could be split vertically?
 
J

jpreman

Hi Macropod,

Thank you very much for the macro. I am sure it will be of grate help to me.

Cheers

macropod said:
Hi jpreman,

The following macro vertically splits all tables in a document that exceed
the horizontal print margins, replicating the first column along the way.
Single-column and two-column tables, including any generated by the split
process, are ignored. Note the 6 lines marked with an '*'. You can delete
these if column 1 is not to be replicated.

You may have to fix the odd line that gets wrapped where it shouldn't as a
result of the posting, but that shouldn't be too difficult.

Sub TableSplit()
Application.ScreenUpdating = False
Dim oLeftMargin As Single, oRightMargin As Single, oGutter As Single
Dim oPageWidth As Single, oPrintWidth As Single, oTableWidth As Single
Dim oTable, oCounter As Integer, i As Integer, j As Integer
If ActiveDocument.Tables.Count = 0 Then Exit Sub
With ActiveDocument.PageSetup
oLeftMargin = .LeftMargin
oRightMargin = .RightMargin
oGutter = .Gutter
oPageWidth = .PageWidth
End With
oPrintWidth = oPageWidth - oLeftMargin - oRightMargin - oGutter
oCounter = 1
Restart:
For j = oCounter To ActiveDocument.Tables.Count
oTable = ActiveDocument.Tables(j)
With ActiveDocument.Tables(j)
.AllowAutoFit = False
.PreferredWidth = 0
End With
oTableWidth = 0
If oTable.Columns.Count < 3 Then GoTo SkipTable
For i = 1 To oTable.Columns.Count
oTableWidth = oTableWidth + oTable.Columns(i).Width
If oTableWidth > oPrintWidth Then
oTableWidth = oTableWidth - oTable.Columns(i).Width
oTable.Columns(i).Select
With Selection
.MoveRight Unit:=wdCharacter, Count:=oTable.Columns.Count - i + 1,
Extend:=wdExtend
.Copy
.Columns.Delete
.MoveDown Unit:=wdLine, Count:=oTable.Rows.Count
.InsertParagraph
.MoveDown Unit:=wdLine, Count:=1
.Paste
End With
oCounter = j
'Delete the next 6 lines (marked '*) if column 1 is not to be
replicated
oTable.Columns(1).Select '*
With Selection '*
.Copy '*
.MoveDown Unit:=wdLine, Count:=2'*
.Paste '*
End With '*
GoTo Restart
End If
Next
SkipTable:
Next
Application.ScreenUpdating = True
End Sub

Cheers

--
macropod
[MVP - Microsoft Word]


jpreman said:
Hi macropod,

Thanks for your response.

Though it was not my immediate issue, I have faced what you have referred at
many a times. I am sure the macro you have will be of much use to me.



macropod said:
Hi jpreman,

If you need to split a table because you've changed the page size and the
table's now too wide, I have a macro I've coded to deal with that. It isn't
coded to handle tables with cells merged across columns, and is designed to
replicate the left-most column for each new table. If that's what you're
trying to achieve, let me know and I'll post the code.

Cheers

--
macropod
[MVP - Microsoft Word]


Thank you for reading this post.

I know it is possible to split a table horizontally. Is there a way a
table
could be split vertically?
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Top