Page breaks
You can set or clear page breaks using the page break property. The following sets a single page break to the left of
column
C
and above
row 10:
With ActiveWorkbook.Sheets("Sheet1")
.Cells.PageBreaks - xlNone 'Clear all manual pagebreaks
.Range("C10").PageBreak = xlPageBreakManual
End WithIn AppleScript:
tell application "Microsoft Excel" tell sheet "Sheet1" of active workbook set pagebreak of every range to page break none set page break of range "C10" to page break manual end tell end tell
Use
page break of every range
— not
every cell.
In Visual Basic for Applications (VBA), you can also specify a horizontal page break or vertical page break by adding to the worksheet's HPageBreaks or VPageBreaks collection.
With ActiveWorkbook.Sheets("Sheet1")
.HPageBreaks.Add Before:=.Range("C10")
End WithIn AppleScript, it's actually a bit simpler since horizontal page break and vertical page break are separate classes.
tell sheet "Sheet3" of active workbook
make new horizontal page break at end with properties ¬
{location:range ("C10")}
end tellNote The insertion location
at end
(or
at
beginning) is essential, or the script errors.
You can also specify more properties.
tell application "Microsoft Excel"
set page break of every range of active sheet to page break none
make new horizontal page break at end of active sheet ¬
with properties {location:range ("C10"), ¬
extent:page break full, horizontal page break type:¬
page break manual}
end tellSet different headers and footers
At times, you want a header or footer only on the first page of a multi-page printout. Microsoft Excel does not have separate first page and even page headers and footers like Microsoft Word does. To print a footer on only the first page, you'll need to cycle through the sheets, printing the first one with the footer. After that, you need to remove the footer before printing the rest of the pages then restore it to the worksheet at the end.
Public Sub FirstPageFooterOnly_OneSheet()
Dim sFooter As String
With ActiveWorkbook.Sheets("My Sheet")
sFooter = .PageSetup.LeftFooter 'Save footer
.PrintOut From:=1, To:=1
.PageSetup.LeftFooter = "" 'Remove from remaining pages
.PrintOut From:=2
.PageSetup.LeftFooter = sFooter 'Restore footer
End With
End SubThis is a straightforward conversion to AppleScript — you look up the analogous names in the dictionary and it works.
tell application "Microsoft Excel" tell sheet "My Sheet" of active workbook set sFooter to left footer of page setup object --save footer print out from 1 to 1 set left footer of page setup object to "" -- remove footer 2nd page print out from 2 set left footer of page setup object to sFooter -- restore end tell end tell
Note that if you have footers — left footer, center footer, and right footer — you'll need to save and restore all of them.
Print preview
You can use the print out method to create a print preview within Excel.
ActiveSheet.Printout Preview:=True
print out active sheet with preview
That does the job, but the script hangs as if it's tied up waiting for a response, perhaps from the printer driver. Here's the way to avoid that so the script can move on directly to the next line, or finish if it's done.
tell application "Microsoft Excel" activate ignoring application responses print out active sheet with preview end ignoring end tell
If a later version of Microsoft Office
introduces a Script menu in Excel, and you run the script from there,
ignoring application responses
will have no effect. It only works when it's directed at an application other than the one running the script. So run this script from the system's Script menu.


