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 100
With .TextRange
' add some text
.Text = "We can add text to shapes"
End With
End With
End With
' or somewhat more compactly
With ActiveWindow.Selection.ShapeRange
.TextFrame.TextRange.Text = "This works too"
End With
End Sub
Most of the example macros here start with that ActiveWindow.Selection.ShapeRange, which we can't replicate in AppleScript. I'm leaving them unaltered in the VBA just to emphasize how often you may need to need to deal with this. Remember that in Office 2008 there should hopefully be a selection property and you would need to replace the line that calls the GetSelectedShape() handler, which won't work then. For now, remember to paste in the GetSelectedShape() handler at the bottom of every script that needs it. I will not include the handler here every time, but they almost all call it, so you'll need it.
tell application "Microsoft PowerPoint"
--get the selected shape via the handler
set selectedShape to my GetSelectedShape() -- paste it in below!
tell selectedShape
tell its text frame -- needs 'its'!
tell its text range -- needs 'its'
--unless noted, refers to all the text in the text frame
set content to "We can add text to shapes."
end tell
end tell
end tell
--or, more compactly
set content of text range of text frame of selectedShape to ¬
"This works too!"
end tell
All very straightforward. Leave out the final line first time through if you want to see the first text change, as it is replaced by the second one so quickly you won't spot it. Note that using nested tell blocks (corresponding to VBA's With blocks) are useful if there are going to be more commands directed at any of the intermediate targets. Otherwise, for a single command like this one, it's simpler to use the more compact 'of' version. (You can use any combination of tell and of you like: it needn't be all or nothing.) This is a very useful example because it contains two properties – text frame and text range – that are the same term (keywords) both for the property of their containing object and for the class. As explained earlier, and in more detail in the Word and Entourage chapters, that is a bit of a "no-no" for application developers. It means you absolutely have to use its in tell blocks and in whose (where its) clauses. You will notice that with two of them here, if you omit the first its for text frame, the script won't even compile for text range.
Check for Text Frames and Text
Some shapes cannot have text frames (namely lines, arrows, connectors) and in other cases a shape that has a text frame may still cause the macro to throw errors when you try to access the text frame or its text, so some conditional coding and error trapping is always a good idea:
Sub TextCaveats()
With ActiveWindow.Selection.ShapeRange
< Previous Page Next Page>
- SPREAD THE WORD:
- Slashdot
- Digg
- Del.icio.us
- Newsvine