Worked like a charm. thank you very much for all the time and effort. Greatly appreciated.
--
Regards
Michael Koerner
Sorry, the Split command was in the wrong place. The following one should work:
Sub InsertFramedHeadRow()
' insert a framed header row into the table
Dim i As Long, j As Long
Dim Init As String
Dim newrow As Row
Dim initrng As Range, arange As Range
Dim dtable As Table
Set dtable = Selection.Tables(1)
j = dtable.Rows.Count
Init = dtable.Cell(j, 1).Range.Characters(1)
For i = j To 1 Step -1
Set initrng = dtable.Cell(i, 1).Range
If initrng.Characters(1) <> Init Then
Set newrow = dtable.Rows.Add(BeforeRow:=dtable.Rows(i + 1))
dtable.Split newrow
Set arange = newrow.Range
arange.Start = arange.Start - 1
arange.Collapse wdCollapseStart
arange.Paragraphs(1).Range.Font.Hidden = True
With newrow
.Cells.Merge
.Cells(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Range.Text = "- " & Init & " -"
.Range.Font.Bold = True
.Range.Shading _
.BackgroundPatternColor = wdColorGray10
.Height = InchesToPoints(0.24)
.Borders.Enable = wdLineStyleSingle
.Borders.OutsideLineWidth = wdLineWidth100pt
End With
Init = initrng.Characters(1)
End If
Next i
Set newrow = dtable.Rows.Add(BeforeRow:=dtable.Rows(i + 1))
With newrow
.Cells.Merge
.Cells(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Range.Text = Init
.Range.Font.Bold = True
.Range.Shading.BackgroundPatternColor = wdColorGray10
End With
End Sub
--
Hope this helps.
Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.
Doug Robbins - Word MVP
Doug;
Thanks very much. Tried the macro a number of times, and each time I got the message the Word was recovering my document and if I wanted to send an error report to Microsoft.
--
Regards
Michael Koerner
Here is your original macro with all of the required modifications:
Sub InsertFramedHeadRow()
' insert a framed header row into the table
Dim i As Long, j As Long
Dim Init As String
Dim newrow As Row
Dim initrng As Range, arange As Range
Dim dtable As Table
Set dtable = Selection.Tables(1)
j = dtable.Rows.Count
Init = dtable.Cell(j, 1).Range.Characters(1)
For i = j To 1 Step -1
Set initrng = dtable.Cell(i, 1).Range
If initrng.Characters(1) <> Init Then
dtable.Split newrow
Set newrow = dtable.Rows.Add(BeforeRow:=dtable.Rows(i + 1))
Set arange = newrow.Range
arange.start = arange.start - 1
arange.Collapse wdCollapseStart
arange.Paragraphs(1).Range.Font.Hidden = True
With newrow
.Cells.Merge
.Cells(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Range.Text = "- " & Init & " -"
.Range.Font.Bold = True
.Range.Shading _
.BackgroundPatternColor = wdColorGray10
.Height = InchesToPoints(0.24)
.Borders.Enable = wdLineStyleSingle
.Borders.OutsideLineWidth = wdLineWidth100pt
End With
Init = initrng.Characters(1)
End If
Next i
Set newrow = dtable.Rows.Add(BeforeRow:=dtable.Rows(i + 1))
With newrow
.Cells.Merge
.Cells(1).Range.ParagraphFormat.Alignment = wdAlignParagraphCenter
.Range.Text = Init
.Range.Font.Bold = True
.Range.Shading.BackgroundPatternColor = wdColorGray10
End With
End Sub
Note that if you the paragraph marks ¶ being displayed in the document, the space between the tables will still appear, but if you click on the ¶ (Show/Hide) button to hide the paragraph marks, the space will disappear. In the Tools>Options>Print dialog, you must also have it set so that Hidden text is not printed.
--
Hope this helps.
Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.
Doug Robbins - Word MVP
Thanks Doug. Where does one insert this in the original macro?
--
Regards
Michael Koerner
I glad that fellow MVP stepped in to sort that out.
Re the white space, when you split a table, a paragraph mark is inserted between the two tables, so you will need to apply appropriate formatting to that paragraph mark - probably formatting the font as hidden
The following code splits a table at the row in which the selection is located and then formats the font of the paragraph between the two tables so that it is hidden:
Dim arow As Row
Dim arange As Range
Set arow = Selection.Rows(1)
Selection.Tables(1).Split arow
Set arange = arow.Range
arange.start = arange.start - 1
arange.Collapse wdCollapseStart
arange.Paragraphs(1).Range.Font.Hidden = True
--
Hope this helps.
Please reply to the newsgroup unless you wish to avail yourself of my
services on a paid consulting basis.
Doug Robbins - Word MVP
Using this line
dtable.Split BeforeRow:=newrow
seems to work okay. Now how does one go about removing all thw whitespace between the tables?
--
Regards
Michael Koerner
Jay Freedman said:
Doug; thanks for taking the time. Greatly appreciated. The macro
gives me a Run-time error '5': Invalid procedure call,and when I
click on debug the following line is highlighted.
If initrng.Characters(1) <> Init Then
Set newrow = dtable.Rows.Add(BeforeRow:=dtable.Rows(i + 1))
dtable.Split (newrow)
With newrow
Very interesting behavior...
When you call a method and you don't use its return value (that is, you use
it as a subroutine and not as a function), VBA prefers that you don't
enclose the argument in parentheses and in some cases considers it an error
(
http://www.word.mvps.org/FAQs/MacrosVBA/BracketsWithArgmnts.htm).
So changing the Split call to
dtable.Split BeforeRow:=newrow
or just
dtable.Split newrow
will work without errors.
According to the Help topic on the Split method, the argument can be either
a Row object (which newrow is) or the row number. That means you could write
the line as
dtable.Split BeforeRow:=newrow.Index
or just
dtable.Split newrow.Index
But now comes the odd part. You can write the line as
dtable.Split (newrow.Index)
and the macro will still work without errors, even though the parentheses
are "wrong". But this line gets a compiler error:
dtable.Split (BeforeRow:=newrow.Index)
--
Regards,
Jay Freedman
Microsoft Word MVP
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.