• MacTech Network:
  • Tech Support
  • |
  • MacForge.net
  • |
  • Apple News
  • |
  • Register Domains
  • |
  • SSL Certificates
  • |
  • iPod Deals
  • |
  • Mac Deals
  • |
  • Mac Book Shelf

MAC TECH

  • Home
  • Magazine
    • About MacTech in Print
    • Issue Table of Contents
    • Subscribe
    • Risk Free Sample
    • Back Issues
    • MacTech DVD
  • Archives
    • MacTech Print Archives
    • MacMod
    • MacTutor
    • FrameWorks
    • develop
  • Forums
  • News
    • MacTech News
    • MacTech Blog
    • MacTech Reviews and KoolTools
    • Whitepapers, Screencasts, Videos and Books
    • News Scanner
    • Rumors Scanner
    • Documentation Scanner
    • Submit News or PR
    • MacTech News List
  • Store
  • Apple Expo
    • by Category
    • by Company
    • by Product
  • Job Board
  • Editorial
    • Submit News or PR
    • Writer's Kit
    • Editorial Staff
    • Editorial Calendar
  • Advertising
    • Benefits of MacTech
    • Mechanicals and Submission
    • Dates and Deadlines
    • Submit Apple Expo Entry
  • User
    • Register for Ongoing Raffles
    • Register new user
    • Edit User Settings
    • Logout
  • Contact
    • Customer Service
    • Webmaster Feedback
    • Submit News or PR
    • Suggest an article
  • Connect Tools
    • MacTech Live Podcast
    • RSS Feeds
    • Twitter

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.

Would you like a hard copy
or PDF of this Guide?

You can get a hard copy sent to you
AND download a PDF now ($19.95)
, or

... just download a PDF ($9.95).

Either way, you get a complimentary
MacTech Magazine Subscription

courtesy of the
Microsoft Mac Business Unit


 

  Magazine Reg. Price:  $50.00 value  
  Guide Reg. Price:  $40.00 value  
  You Save:  over $80.00!  

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>
 
MacTech Only Search:
Community Search:

 
 
 

 
 
 
 
 
  • SPREAD THE WORD:
  • Slashdot
  • Digg
  • Del.icio.us
  • Reddit
  • Newsvine
  • Generate a short URL for this page:



MacTech Magazine. www.mactech.com
Toll Free 877-MACTECH, Outside US/Canada: 805-494-9797
MacTech is a registered trademark of Xplain Corporation. Xplain, "The journal of Apple technology", Apple Expo, Explain It, MacDev, MacDev-1, THINK Reference, NetProfessional, Apple Expo, MacTech Central, MacTech Domains, MacNews, MacForge, and the MacTutorMan are trademarks or service marks of Xplain Corporation. Sprocket is a registered trademark of eSprocket Corporation. Other trademarks and copyrights appearing in this printing or software remain the property of their respective holders.
All contents are Copyright 1984-2010 by Xplain Corporation. All rights reserved. Theme designed by Icreon.
 
Nov. 20: Take Control of Syncing Data in Sow Leopard' released
Nov. 19: Cocktail 4.5 (Leopard Edition) released
Nov. 19: macProVideo offers new Cubase tutorials
Nov. 18: S Stardom anounces Safe Capsule, a companion piece for Apple's
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live
Nov. 17: Ableton releases Max for Live