• 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 62



Here's the AppleScript version:

tell application "Microsoft Excel"

     tell active sheet

          set lastRowNum to first row index of ¬

              (get end (cell 1 of row (count rows)) direction toward the top)

          set rDelete to missing value

          repeat with i from 1 to (count cells of range ("A2:A" & lastRowNum))

              --that's column A from 2nd cell to bottom used cell                                   

              set rCell to (cell i of range ("A2:A" & lastRowNum))

              if value of rCell = value of (get offset rCell row offset -1) then

                   if rDelete = missing value then

                        set rDelete to rCell

                   else

                        set rDelete to union range1 rDelete range2 rCell

                   end if

              end if

          end repeat

          if rDelete ­ missing value then delete entire row of rDelete

     end tell

end tell

Once again we set a variable to the last row number to make things more manageable in the repeat statement. In AppleScript, a variable that is not defined is not equal to null (our rarely used version of Nothing), it instead causes an error if called. Normally we would just trap that error with a try/on error block, but in this case it would also put the union statement in the same try block and so perhaps catch a different error (leading to a never-ending loop that keeps setting rDelete to the first cell), or would require some very complex error management, plus would invert the order of things to come, making comparisons more difficult.

So it makes good sense to initialize rDelete to a value it couldn't possibly have otherwise. We could set it to anything we like that's not an Excel range, and common initializations would be to "" or 0. But we might as well use AppleScript's handy expression for something undefined but which does not error – missing value. (You'll be seeing that a lot if either you or Excel makes a mistake in scripting.) It's not exactly null, but it's just what we want here.

Checking back if necessary to Working with Columns and Rows, and bearing in mind that in just the same way you cannot get (every cell of someRange) nor set a variable to it, but you can count cells of someRange (!), we have to construct the repeat loop to avoid the repeat with rCell in (cells of someRange) syntax, and equally to avoid setting rCell to item i of (cells of someRange). [someRange in this case being range ("A2:A" & lastRowNum) throughout.]

Instead we must set it up so we refer to



< 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