For the past three years, I have been trying to find a way to automate the tedious task of printing two copies of 30 plus PowerPoint Presentations to PDF, first as Notes Pages and then as 3 Slides Per Page Handouts. Every six months I would spend a few hours testing various batch printing applications to see if they would complete this task for me. Unfortunately, every time I would find they would only print the standard One Slide Per Page view without the Notes field included.
Well, Thursday of last week, I had a breakthrough! I came across a Visual Basic script which created a new PowerPoint Presentation and manipulated the Print Options. Eureka! This was how I was going to solve my problem. Instead of trolling the Internet for a batch print application, I would write one myself using Visual Basic!
I should point out that before Thursday, I had never used Visual Basic to do anything and had no idea how the language worked. However, I have many years of experience with Java, JavaScript, PHP, and ActionScript, and I have an Internet connection, so what more could I need? Apparently that was it, because before noon on Friday, I had a script which would scan a specific folder on my Desktop, record all of the file names, open each of them up, set the Print Options, Print to PDF, and then close the files. A task that used to take me several hours now takes about a 10th of that time.
Having never used VBScript before, I found it fairly easy to learn. I definitely recommend it if you are trying to automate some tedious task using an MS Word product. There is a fair amount of information online to help you. Besides, why pay for someone else’s product that doesn’t work when you can build a simple script to do it for you and get exactly what you want 🙂
Here’s the code I created to accomplish my printing task:
Const sFolder = "D:Documents and SettingsusernameDesktopPPT_Printerto_print"
Sub makeFileList()
On Error Resume Next
Dim fso, folder, files, i
Set fso = CreateObject("Scripting.FileSystemObject")
Set folder = fso.GetFolder(sFolder)
Set files = folder.Files
Set i = 0
For each folderIdx In files
If i = 0 Then
file_list(i) = sFolder & folderIdx.Name
Else
redim preserve file_list(ubound(file_list) + 1)
file_list(i) = sFolder & folderIdx.Name
End If
i = i + 1
Next
End Sub
Call makeFileList()
'Const ppPrintOutputThreeSlideHandouts = 3
Const ppPrintOutputNotes = 5
For j = 0 To ubound(file_list)
Set objPPT = CreateObject("PowerPoint.Application")
objPPT.Visible = True
Set objPresentation = objPPT.Presentations.Open(file_list(j))
Set objOptions = objPresentation.PrintOptions
'objOptions.OutputType = ppPrintOutputThreeSlideHandouts
'objPresentation.PrintOut
objOptions.OutputType = ppPrintOutputNotes
objPresentation.PrintOut
objPresentation.Close
Next
If anyone else has ever needed to do this, I hope it helps make your life a little easier too. If you’re new to VBScript and want to know some details about how to use this script, post a comment and I’ll be happy to answer your questions.