
macro for converting EMF tables in Word to normal cellular Tables
I do electronic publishing and have automated some of my workflow. My
clients sometimes send Word files that have EMF (Excel MetaFile?) objects in
them, which render them for all intents and purposes graphics inside Word.
I need these to be converted to normal cellular rows and columns (Tables) so
that my script can work properly.
If I do this manually, I have to double-click each EMF object, and, after
Excel has been activated, select the corresponding rows and columns of cells
in Excel, copy the selection, close the worksheet, switch back to Word,
delete the (previously selected) object, and issue a paste command, which
places the cells selected in Excel where the EMF object used to be (but in
cellular format).
BTW, this is AppleScript, I am working on a Mac. That should not be a
problem - as AppleScript can send VBA commands to Word and Excel, using the
"do Visual Basic" command. The Sub/End Sub lines are the only things that
are removed.
I want to build a decision tree in my script which, if EMF objects are
found, will convert them to proper Tables and then move on to other
activities.
The key is to avoid trying to use the AppleScript dictionaries of Word and
Excel, because their AppleScript implementation is buggy (at least that's
true of Word - I have less experience with Excel). However, issuing a VB
command from AppleScript works just fine. (I have been recently educated on
this point by Paul Berkowitz and other posters on this and other MS-related
newsgroup boards.)
Since most of you are no doubt working on the Windows side of things, I just
want to show you how a piece of VB code looks in its native and AppleScript
contexts. The following (functional) code detects and activates each EMF
table. Here is the pure VBA version:
Sub test()
For Each OLEobject In ActiveDocument.Shapes
If OLEobject.Creator = 1297307460 Then
OLEobject.Activate
End If
Next
End Sub
...and now the AppleScript version:
tell application "Microsoft Word"
do Visual Basic "For Each OLEobject in ActiveDocument.Shapes
If OLEobject.Creator = 1297307460 then
OLEobject.Activate
End If
Next "
end tell
Now, the hard part is to where Excel needs to be called to select the cells
that are linked with the object, copy, go back to Word, delete the selected
object, and paste the copied selection from Excel in its old place. This is
where I need help.
I was given the following (as well as the preceding) code by another poster,
and, in the context of AppleScript, this is how Excel was called:
tell application "Microsoft Excel"
repeat until number of documents is 0
save document 1 in "Disk:Table" & (number of documents) as xlText
close document 1
end repeat
end tell
It looks like it's trying to write some kind of temporary files; anyway, the
script does not work. Can anyone suggest a pure VBA approach? I'll worry
about adding the AppleScript command framework.
Many thanks,
Bill Planey