Print multiple files

M

milo19

I want to be able to highlight multiple Word 2007 documents and print them in
the order that they appear in the selection. Word will print the files, but
not in the correct order. How can I print many files in the correct order?
 
G

Graham Mayor

This is a Windows issue. One way to overcome the problem is to beat it with
a blunt instrument. The following macro allows you to select a list of
files. The filenames are then loaded into a Word document and sorted into
alphabetical order. (To print in a preferred random order is somewhat more
complicated and you would have to use a method like that employed in my
boiler add-in to assemble the files in order before processing them - in
fact I might create an add-in to do just that :) if I have a few minutes
spare)

The files listed in the document are then opened in the order they are now
presented, printed and closed.

Sub BatchPrint()
Dim strPath As String
Dim oDoc As Document, oPrDoc As Document
Dim oRng As Range
Dim i As Long, iNum As Long
Dim fDialog As FileDialog
Set fDialog = Application.FileDialog(msoFileDialogFilePicker)
With fDialog
.title = "Select files to print and click OK"
.AllowMultiSelect = True
.InitialView = msoFileDialogViewList
If .Show <> -1 Then
MsgBox "Cancelled By User", , _
"Print Files"
Exit Sub
End If
End With
Set oDoc = Documents.Add
iNum = fDialog.SelectedItems.Count
For i = 1 To iNum
strPath = fDialog.SelectedItems.Item(i)
oDoc.Range.InsertAfter strPath
If i < fDialog.SelectedItems.Count Then
oDoc.Range.InsertAfter vbCr
End If
Next i
oDoc.Range.Sort
For i = 1 To iNum
Set oRng = oDoc.Paragraphs(i).Range
oRng.End = oRng.End - 1
MsgBox oRng.Text
WordBasic.DisableAutoMacros 1
Set oPrDoc = Documents.Open(oRng.Text)
oPrDoc.PrintOut
oPrDoc.Close wdDoNotSaveChanges
WordBasic.DisableAutoMacros 0
Next i
End Sub
http://www.gmayor.com/installing_macro.htm

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
G

Graham Mayor

If you want to try it, I have posted the add-in on my web site at
http://www.gmayor.com/Zips/Word_Batch_Print.zip but the documentation will
have to wait until tomorrow. It is however fairly straightforward. If you
install the 2007 version, you will get a button on the developer tab of the
ribbon, which will activate a userform. Pick the files you want to print and
it will print them in the order they are listed.

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
M

milo19

Unfortunately, neither the zip file nor the macro worked correctly in
printing the documents in the specified order. The files print, but not
always in the order selected. Is there an additional setting that I have to
change somewhere?
 
G

Graham Mayor

Both the macro and the add-in open the documents in the selected order (the
macro in alphabetical order) and print them, just as if you had opened them
manually one at a time. I cannot think what mechanism is involved that would
make them change that order during the printing process. The add-in is now
documented on my web site - http://www.gmayor.com/Batch_Print.htm

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
M

milo19

Thank you for your help, but I am back to where I started. The Add-In Batch
File Print macro does not print the files in the selected order. I (as well
as staff) tested this Add-In and most of the time it did not print the files
in the order specified. Sometimes it worked; but most of the time it did not
print in the selected order. I had a sample file called 1Test and another
file called 10Test. Even though 10Test was the selected as the last file to
be printed, it always printed first. We tried printing 25 memos (as one
example) in a specified order and again, it did not print in the correct
order. I spent over 2 hours testing this batch file and found it to be
inconsistent.
 
G

Graham Mayor

Oops! My fault. :eek:(
I had left a line of code from the original macro that the add-in was
supposed to correct and I had missed it when I tested it.
I have replaced the add-ins on the web site. They should now work as
described.
Apologies

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
M

milo19

Thank you for the fix! :) We are currently testing the macro again and so
far it is printing documents in the specified order as long as the Print in
Background setting is turned off.
 
G

Graham Mayor

I am not sure why that is necessary - as the macro should add the documents
to the print queue in order.

--
<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
Graham Mayor - Word MVP


<>>< ><<> ><<> <>>< ><<> <>>< <>><<>
 
M

milo19

We are selecting many documents (30-40) and for some reason the macro does
not print in the selected order unless the setting, Print in Background, is
turned off. We are still testing, but that is what we have found so far.
Thanks again for your help.
 
G

Graham Mayor

The relevant part of the add-in is as follows. I suspect that the document
may be being closed before it has finished spooling. If you disable the
lines
oPrDoc.PrintOut
and
oPrDoc.Close wdDoNotSaveChanges
by adding an apostrophe to the start of each line and run the macro, you
should end up with a document (oDoc) that contains the list of documents in
the order they are to be printed.

If that is OK then try introducing a delay eg

For i = 1 To 500000000
Next i

between
oPrDoc.PrintOut
oPrDoc.Close wdDoNotSaveChanges
thus

oPrDoc.PrintOut

For i = 1 To 500000000
Next i
oPrDoc.Close wdDoNotSaveChanges

Which will add a delay of around 10 seconds (depending on the speed of your
PC) - much shorter than the print cycle, but may give sufficient delay to
ensure that the document is spooled correctly.

Private Sub CommandButton1_click()
Unload Me
For i = 0 To ListBox2.ListCount - 1
strPath = sBatchFolder & ListBox2.List(i)
oDoc.Range.InsertAfter strPath
If i < ListBox2.ListCount - 1 Then
oDoc.Range.InsertAfter vbCr
End If
Next i
Application.ScreenUpdating = False
For i = 1 To oDoc.Paragraphs.Count
Set oRng = oDoc.Paragraphs(i).Range
oRng.End = oRng.End - 1
WordBasic.DisableAutoMacros 1
'************************************
Set oPrDoc = Documents.Open(oRng.Text)
oPrDoc.PrintOut
oPrDoc.Close wdDoNotSaveChanges
'************************************
WordBasic.DisableAutoMacros 0
Next i
oDoc.Close wdDoNotSaveChanges
Application.ScreenUpdating = True
End Sub

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