![](/sites/all/themes/custom_front/images/you_are_here_red.gif)
![](/sites/default/files/beta-site.gif)
Moving from Microsoft Office VBA to AppleScript:
MacTech's Guide to Making the Transition
Introduction
|
Table of Contents
Page Prev and Page Next buttons at bottom of the page.
|
April, 2007
Page 26
You also need to specify an "index" parameter to specify which header or footer you want. That is similar to VBA's Headers and Footers Properties of Section when used with an index. i.e.
ActiveDocument.Sections(1).Headers(wdHeaderFooterPrimary)
corresponds exactly to
get header (section 1 of active document) index header footer primary
So far so good. But there's no easy way to get every header or every footer, nothing equivalent to
ActiveDocument.Sections(1).Headers
in the macro above. We have to go get each one – all 6 headers and footers – by index. We could perhaps run each one through a handler to get its text object (Range) and fields, or we can just accumulate them all together in a list (by putting each into a single-item list framed by list braces) and concatenating these lists together, then run a repeat loop on the list, as this version does:
tell application "Microsoft Word"
set theSections to every section of active document
repeat with theSection in theSections
set theHeaderFooters to {get header theSection index ¬
header footer primary} & {get header theSection index ¬
header footer first page} & {get header theSection index ¬
header footer even pages} & {get footer theSection index ¬
header footer primary} & {get footer theSection index ¬
header footer first page} & {get footer theSection index ¬
header footer even pages}
repeat with theHeaderFooter in theHeaderFooters
set theFields to every field of text object of theHeaderFooter
repeat with theField in theFields
unlink theField
end repeat
end repeat
end repeat
end tell
One thing you may notice is that we don't have to run an exists test on the header footers as in VBA. In the VBA model, only primary headers and footers exist by default (even if they are empty): you have to check whether 'first page' and 'even pages' varieties (constants wdHeaderFooterFirstPage, wdHeaderFooterEvenPages) exist. In AppleScript, because get header and get footer can apply header footer first page and even pages as parameters and get a result, all of them exist by default, even if empty. So the script above works. There are no problems with empty lists for theFields when the text object of theHeaderFooter has none.
You will need to be on the lookout for other classes, which are not elements of another class, nor part of a friendlier object oriented model, but are only available as the result of a proprietary command. There are quite a few of these around.
Find and replace text
A very common activity in Word macros is finding and replacing text. (There was an example already in Chapter 2: tell blocks.) Unlike the ordinary Find/Replace dialog in the User Interface, Word's VBA only finds and replaces within a specific part of a document (e.g. the main body, a header, a text box). If you want to do a global find/replace everywhere in a document including headers, footers and textboxes, you need to do something like this, as in a macro by Word MVP Jonathan West:
< Previous Page Next Page>
![](/sites/all/themes/custom_front/img/search_text.gif)
- SPREAD THE WORD:
- Slashdot
- Digg
- Del.icio.us
- Newsvine