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 63
cell i of someRange
so that's what we do, and everything is fine. The VBA Offset Method is reproduced by get offset: we have to spell out the parameter names row offset and column offset of course, but the default for each is 0 so we can omit column offset.
The union command, which for some reason we find in the Microsoft Excel Suite instead of in the Table Suite where it ought to be since it acts only on ranges, uses parameters range1, range2, etc. I am happy to report that delete entire row works fine on a non-contiguous range.
However, there is yet one other way we could do this in AppleScript, not available to VBA, since delete can act all at once on a list of ranges:
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 {}
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
set end of rDelete to (entire row of rCell)
end if
end repeat
if rDelete {} then delete rDelete
end tell
end tell
Isn't that simple in comparison? We initialize rDelete to an empty list {}; if we find a duplicate cell we set the end of the list rDelete to the entire row of that cell without having to check every time to see if the list is empty or not, then at the end we delete the list and that's that. Accustomed as you are to VBA you may prefer to mirror it exactly as you start converting your macros, but in time as you get accustomed to AppleScript you will, and should, find more native and natural ways to do things in your new language.
The above example, deleting duplicate rows, assumed that the data was sorted first. (Otherwise there might still have been duplicates that were not in adjacent rows.) This can be accomplished in VBA by the Sort method, and in AppleScript by the identical sort command. If a single cell is specified, the current region will be sorted (the area around the cell bounded by both blank rows and columns. This snippet sorts the current region around cell A1 based first on the values in column A, then on the values in column B:
With ActiveSheet
Range("A1").Sort _
Order1:=xlAscending, _
Key1:=.Columns("A"), _
< Previous Page Next Page>
- SPREAD THE WORD:
- Slashdot
- Digg
- Del.icio.us
- Newsvine