#1
|
||||
|
||||
Shrink to fit long merged name
Hi. In a document with a merged field of names, is there a command that can shrink the long names to fit in a fixed column width in one line? I do not like the fit text because it distributes/spreads the characters across the width of the column. Thank you. *A mother named her baby Hershey Chocolate |
#2
|
||||
|
||||
You can indeed use the .FitText method in a post-merge macro, but restrict its application to cells in which text wrapping occurs. For example:
Code:
With ActiveDocument.Tables(t).Cell(r, c).Range If .Characters.Last.Previous.Information(wdVerticalPositionRelativeToPage) <> _ .Characters.First.Information(wdVerticalPositionRelativeToPage) Then .FitTextWidth = w End If End With • t is the table # • r is the row # • c is the column# • w is the width in points
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#3
|
||||
|
||||
Thank you Paul.
But, I do not know how to input the row number, column number and column width in the code. The row number is 12, column number 2 and the column width is 2.38 inches. My vba "expertise" is to record repetitive tasks. But editing organic a code stump me. Marcia |
#4
|
||||
|
||||
In which case, assuming it's in table 1:
Code:
With ActiveDocument.Tables(1).Cell(12, 2).Range If .Characters.Last.Previous.Information(wdVerticalPositionRelativeToPage) <> _ .Characters.First.Information(wdVerticalPositionRelativeToPage) Then .FitTextWidth = InchesToPoints(2.38) End If End With
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#5
|
||||
|
||||
I had to do some google search on how to caption a table.
The code works beautifully on long names. On short names however, the code spreads/distributes the characters on the whole width adding unsightly spaces in between characters. |
#6
|
||||
|
||||
That could only be happening to your second example if it spanned more than one line. The code specifically tests how many lines the content in each cell spans. Perhaps you have an extraneous paragraph break/line break there? Or are you doing this in the mailmerge main document instead of to the output?
For a generalised mailmerge solution, you might use something like: Code:
Sub MailMergeToDoc() Application.ScreenUpdating = False Dim Tbl As Table, Cll As Cell, Par As Paragraph, sCllWdth As Single, sParWdth As Single With ActiveDocument With .Tables(1).Cell(1, 1) sCllWdth = .Width - .LeftPadding - .RightPadding With .Range.Paragraphs(1) sCllWdth = sCllWdth - .LeftIndent - .RightIndent End With End With End With .MailMerge.Execute End With With ActiveDocument For Each Tbl In .Tables For Each Cll In Tbl.Range.Cells If Len(Cll.Range) > 2 Then For Each Par In Cll.Range.Paragraphs With Par.Range sParWdth = .Characters.Last.Previous.Information(wdHorizontalPositionRelativeToPage) _ - .Characters.First.Information(wdHorizontalPositionRelativeToPage) If sParWdth > sCllWdth Then .FitTextWidth = sCllWdth If .Characters.Last.Previous.Information(wdVerticalPositionRelativeToPage) > _ .Characters.First.Information(wdVerticalPositionRelativeToPage) Then .FitTextWidth = sCllWdth End With Next End If Next Next End With Application.ScreenUpdating = True End Sub The only caveat is that every intended new line in the cells is created by a paragraph break rather than a manual line break.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#7
|
||||
|
||||
My bad. Yes I ran the code in the main document, not the result. But, when I pasted the code to the resulting merged documents of 80 tables, it did not do anything when ran. I tried sending 1 data set only (the long name) instead of the whole 80 datasets and it was good. I selected another data with short name, sent it to editing, ran the code and it worked. It did not spread the characters out.
It is only when there are more than 1 table in the merged document (results) that the code does not do any changes. |
#8
|
||||
|
||||
The code assumes the table the cell widths are to be calculated from is the first table in the document and, as coded, the first cell in that table. As I said, it's generic. If your mailmerge main document has multiple tables, you'd need to specify which table to use; you'd probably also want to code the macro to skip over other tables.
__________________
Cheers, Paul Edstein [Fmr MS MVP - Word] |
#9
|
||||
|
||||
Thank you Paul. My workaround is to unselect the few long names, send the short names to the printer then print separately those with long names after running the macro in the main document.
|
|
Similar Threads | ||||
Thread | Thread Starter | Forum | Replies | Last Post |
How to unmerge all merged cell and fill them with the merged values? | Bumba | Excel Programming | 1 | 11-10-2019 11:36 AM |
Why my Docm file does not shrink in size? | eduzs | Word VBA | 3 | 09-16-2018 04:13 AM |
Does Word automatically shrink graphics? | jrasicmark | Drawing and Graphics | 1 | 05-06-2014 04:38 PM |
Custom Animation: Faded Shrink? | Dingeling | PowerPoint | 2 | 12-14-2011 02:14 AM |
Possible to shrink .DOC file? | uoficowboy | Word | 0 | 06-09-2010 10:13 AM |