Mail Merge to labels, from Right to Left

L

LMcL

When I mail merge to labels can I specify that the first
records goes in the top right corner, then the top middle,
then top left (if there are 3 columns), then onto the
second row, starting on right hand side, going to the left.
 
P

Peter Jamieson

If possible, find a way to resequence your data source to give you the
sequence you need.

Otherwise, only by introducing a mass of field code.

e.g. let's suppose a simpler scenario where you have 1 field in your label
called myfield, and you have 2 columns and 3 rows. Then a typical mail merge
main document would look like this (Alt-F9 to see the field codes):

{ MERGEFIELD myfield } { NEXT }{ MERGEFIELD myfield }

{ NEXT }{ MERGEFIELD myfield } { NEXT }{ MERGEFIELD myfield }

{ NEXT }{ MERGEFIELD myfield } { NEXT }{ MERGEFIELD myfield }

But what you would need is something like this:

{ SET R1C2 { MERGEFIELD myfield } { NEXT
}{ SET R1C1 { MERGEFIELD myfield } { NEXT
}{ SET R2C2 { MERGEFIELD myfield } { NEXT
}{ SET R2C1 { MERGEFIELD myfield } { NEXT
}{ SET R3C2 { MERGEFIELD myfield } { NEXT
}{ SET R3C1 { MERGEFIELD myfield
}{ REF R1C1 } { REF R1C2 }

{ REF R2C1 } { REF R2C2 }

{ REF R3C1 } { REF R3C2 }

where all the {} are the special field braces you can insert using ctrl-F9.
 
D

Doug Robbins - Word MVP

Here's a macro that sorts a data source so that labels are printed top to
bottom then left to right rather than in the default order. You can
probably change it to do the sort that you would require

' Macro to assign numbers to data source so that it can be sorted to cause
labels to print down columns
Dim Message, Title, Default, labelrows, labelcolumns, i As Integer, j As
Integer, k As Integer
Message = "Enter the number of labels in a row" ' Set prompt.
Title = "Labels per Row" ' Set title.
Default = "3" ' Set default.
' Display message, title, and default value.
labelcolumns = InputBox(Message, Title, Default)
Message = "Enter the number of labels in a column" ' Set prompt.
Title = "Labels per column" ' Set title.
Default = "5" ' Set default.
labelrows = InputBox(Message, Title, Default)
ActiveDocument.Tables(1).Columns.Add
BeforeColumn:=ActiveDocument.Tables(1).Columns(1)
ActiveDocument.Tables(1).Rows(1).Range.Cut
k = 1
For i = 1 To ActiveDocument.Tables(1).Rows.Count - labelcolumns
For j = 1 To labelrows
ActiveDocument.Tables(1).Cell(i, 1).Range.InsertBefore k + (j - 1) *
labelcolumns
i = i + 1
Next j
k = k + 1
i = i - 1
If k Mod labelcolumns = 1 Then k = k - labelcolumns + labelcolumns *
labelrows
Next i
ActiveDocument.Tables(1).Sort FieldNumber:="Column 1"
ActiveDocument.Tables(1).Rows(1).Select
Selection.Paste
ActiveDocument.Tables(1).Columns(1).Delete

--
Please post any further questions or followup to the newsgroups for the
benefit of others who may be interested. Unsolicited questions forwarded
directly to me will only be answered on a paid consulting basis.

Hope this helps
Doug Robbins - Word MVP
 

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