A Microsoft Office (Excel, Word) forum. OfficeFrustration

If this is your first visit, be sure to check out the FAQ by clicking the link above. You may have to register before you can post: click the register link above to proceed. To start viewing messages, select the forum that you want to visit from the selection below.

Go Back   Home » OfficeFrustration forum » Microsoft Word » Tables
Site Map Home Register Authors List Search Today's Posts Mark Forums Read  

Borders and Shading



 
 
Thread Tools Display Modes
  #1  
Old June 4th, 2008, 07:37 PM posted to microsoft.public.word.tables
Michael Koerner
external usenet poster
 
Posts: 2,341
Default Borders and Shading

I do a mail merge from Excel into a Word table. Once the merge is completed, I have a macro (thanks to someone in this NG) which goes through the table, and when the first letter of the last name (column 1) changes it inserts a new row, combines all the cells sets the shading to 10%grey, centers an upper case character for that letter and inserts a border around that cell. The problem arises when the newly created cell is the first row on a new page, the last row on the previous page contains a bottom border which should not be there.

If I select the last row on the page, and delete the border, the border is removed from the top of the next page also. The only way I have found to keep the border where it is required and remove it from where it is not wanted is to delete the border one cell at a time rather than selecting the whole row at once. I was wondering if there might be an easier way to do this?

--

Regards
Michael Koerner


  #2  
Old June 4th, 2008, 07:48 PM posted to microsoft.public.word.tables
Michael Koerner
external usenet poster
 
Posts: 2,341
Default Borders and Shading

Forgot to add I'm using Office 2007 running under XP

--

Regards
Michael Koerner


"Michael Koerner" wrote in message ...
I do a mail merge from Excel into a Word table. Once the merge is completed, I have a macro (thanks to someone in this NG) which goes through the table, and when the first letter of the last name (column 1) changes it inserts a new row, combines all the cells sets the shading to 10%grey, centers an upper case character for that letter and inserts a border around that cell. The problem arises when the newly created cell is the first row on a new page, the last row on the previous page contains a bottom border which should not be there.

If I select the last row on the page, and delete the border, the border is removed from the top of the next page also. The only way I have found to keep the border where it is required and remove it from where it is not wanted is to delete the border one cell at a time rather than selecting the whole row at once. I was wondering if there might be an easier way to do this?

--

Regards
Michael Koerner


  #3  
Old June 5th, 2008, 10:22 AM posted to microsoft.public.word.tables
Doug Robbins - Word MVP
external usenet poster
 
Posts: 8,239
Default Borders and Shading

It might be better to modify the macro so that it splits the table before the row that is added so that the application of the border to that row will have no impact on the previous row.

--
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

"Michael Koerner" wrote in message ...
I do a mail merge from Excel into a Word table. Once the merge is completed, I have a macro (thanks to someone in this NG) which goes through the table, and when the first letter of the last name (column 1) changes it inserts a new row, combines all the cells sets the shading to 10%grey, centers an upper case character for that letter and inserts a border around that cell. The problem arises when the newly created cell is the first row on a new page, the last row on the previous page contains a bottom border which should not be there.

If I select the last row on the page, and delete the border, the border is removed from the top of the next page also. The only way I have found to keep the border where it is required and remove it from where it is not wanted is to delete the border one cell at a time rather than selecting the whole row at once. I was wondering if there might be an easier way to do this?

--

Regards
Michael Koerner


  #4  
Old June 5th, 2008, 11:30 AM posted to microsoft.public.word.tables
Michael Koerner
external usenet poster
 
Posts: 2,341
Default Borders and Shading

Doug;

I thought of that. but my knowledge of macro programming is limited to the spelling of the word macro g Below is the code for the macro that someone provided for me awhile back. If you or anyone can change the code to do this, it would be greatly appreciated. Might be useful to others also.

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
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))
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



--

Regards
Michael Koerner


"Doug Robbins - Word MVP" wrote in message ...
It might be better to modify the macro so that it splits the table before the row that is added so that the application of the border to that row will have no impact on the previous row.

--
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

"Michael Koerner" wrote in message ...
I do a mail merge from Excel into a Word table. Once the merge is completed, I have a macro (thanks to someone in this NG) which goes through the table, and when the first letter of the last name (column 1) changes it inserts a new row, combines all the cells sets the shading to 10%grey, centers an upper case character for that letter and inserts a border around that cell. The problem arises when the newly created cell is the first row on a new page, the last row on the previous page contains a bottom border which should not be there.

If I select the last row on the page, and delete the border, the border is removed from the top of the next page also. The only way I have found to keep the border where it is required and remove it from where it is not wanted is to delete the border one cell at a time rather than selecting the whole row at once. I was wondering if there might be an easier way to do this?

--

Regards
Michael Koerner


  #5  
Old June 6th, 2008, 01:02 PM posted to microsoft.public.word.tables
Doug Robbins - Word MVP
external usenet poster
 
Posts: 8,239
Default Borders and Shading

Try

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
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)
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

"Michael Koerner" wrote in message ...
Doug;

I thought of that. but my knowledge of macro programming is limited to the spelling of the word macro g Below is the code for the macro that someone provided for me awhile back. If you or anyone can change the code to do this, it would be greatly appreciated. Might be useful to others also.

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
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))
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



--

Regards
Michael Koerner


"Doug Robbins - Word MVP" wrote in message ...
It might be better to modify the macro so that it splits the table before the row that is added so that the application of the border to that row will have no impact on the previous row.

--
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

"Michael Koerner" wrote in message ...
I do a mail merge from Excel into a Word table. Once the merge is completed, I have a macro (thanks to someone in this NG) which goes through the table, and when the first letter of the last name (column 1) changes it inserts a new row, combines all the cells sets the shading to 10%grey, centers an upper case character for that letter and inserts a border around that cell. The problem arises when the newly created cell is the first row on a new page, the last row on the previous page contains a bottom border which should not be there.

If I select the last row on the page, and delete the border, the border is removed from the top of the next page also. The only way I have found to keep the border where it is required and remove it from where it is not wanted is to delete the border one cell at a time rather than selecting the whole row at once. I was wondering if there might be an easier way to do this?

--

Regards
Michael Koerner


  #6  
Old June 6th, 2008, 02:37 PM posted to microsoft.public.word.tables
Michael Koerner
external usenet poster
 
Posts: 2,341
Default Borders and Shading

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

--

Regards
Michael Koerner


"Doug Robbins - Word MVP" wrote in message ...
Try

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
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)
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

"Michael Koerner" wrote in message ...
Doug;

I thought of that. but my knowledge of macro programming is limited to the spelling of the word macro g Below is the code for the macro that someone provided for me awhile back. If you or anyone can change the code to do this, it would be greatly appreciated. Might be useful to others also.

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
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))
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



--

Regards
Michael Koerner


"Doug Robbins - Word MVP" wrote in message ...
It might be better to modify the macro so that it splits the table before the row that is added so that the application of the border to that row will have no impact on the previous row.

--
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

"Michael Koerner" wrote in message ...
I do a mail merge from Excel into a Word table. Once the merge is completed, I have a macro (thanks to someone in this NG) which goes through the table, and when the first letter of the last name (column 1) changes it inserts a new row, combines all the cells sets the shading to 10%grey, centers an upper case character for that letter and inserts a border around that cell. The problem arises when the newly created cell is the first row on a new page, the last row on the previous page contains a bottom border which should not be there.

If I select the last row on the page, and delete the border, the border is removed from the top of the next page also. The only way I have found to keep the border where it is required and remove it from where it is not wanted is to delete the border one cell at a time rather than selecting the whole row at once. I was wondering if there might be an easier way to do this?

--

Regards
Michael Koerner


  #7  
Old June 6th, 2008, 04:02 PM posted to microsoft.public.word.tables
Jay Freedman
external usenet poster
 
Posts: 9,488
Default Borders and Shading

Michael Koerner wrote:
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/Macros...thArgmnts.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 FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.


  #8  
Old June 6th, 2008, 06:15 PM posted to microsoft.public.word.tables
Michael Koerner
external usenet poster
 
Posts: 2,341
Default Borders and Shading

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" wrote in message ...
Michael Koerner wrote:
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/Macros...thArgmnts.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 FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.


  #9  
Old June 7th, 2008, 09:07 AM posted to microsoft.public.word.tables
Doug Robbins - Word MVP
external usenet poster
 
Posts: 8,239
Default Borders and Shading

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

"Michael Koerner" wrote in message ...
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" wrote in message ...
Michael Koerner wrote:
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/Macros...thArgmnts.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 FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.


  #10  
Old June 7th, 2008, 10:48 AM posted to microsoft.public.word.tables
Michael Koerner
external usenet poster
 
Posts: 2,341
Default Borders and Shading

Thanks Doug. Where does one insert this in the original macro?

--

Regards
Michael Koerner


"Doug Robbins - Word MVP" wrote in message ...
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

"Michael Koerner" wrote in message ...
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" wrote in message ...
Michael Koerner wrote:
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/Macros...thArgmnts.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 FAQ: http://word.mvps.org
Email cannot be acknowledged; please post all follow-ups to the newsgroup so
all may benefit.


 




Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is Off
HTML code is Off
Forum Jump


All times are GMT +1. The time now is 10:17 PM.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Copyright ©2004-2024 OfficeFrustration.
The comments are property of their posters.