だいたいOffice 2008のAppleScript的な世界観が分かってきたので、てはじめに簡単なExcelのVBAスクリプトをAppleScriptに置き換えるシミュレーションを行ってみた。完全に書き換えは行わないが、どの程度書けるのかを軽く調べてみようというわけだ。
同僚に「なるべく簡単なもの」をほしいとお願いし、実に実験用に適したマクロ付きExcel書類をメールで送ってもらった。ありがたい。自分で書いたものを書き換えたところであまり意味がない。他人が作ったものであることに意義があるのだ。
さっそく、Excel 2008でオープンすると……「このファイルにはVisual Basicのマクロが含まれています」と警告が出る。
ヘルプを見ると、対処方法に……
「AppleScriptを使用して新しいマクロを作成します。
現在、Visual Basicを使用してOffice for Macのアドインを作成している場合、別の方法でスクリプトを作成し直す必要があります。Microsoftでは、Appleより提供されているシステムレベルのスクリプト言語である、AppleScriptへの移行をお勧めします。」
というたいへん素敵な表示が出てくる。大笑い。
ここで「爆笑」と書くと、実は意味がおかしくなる。爆笑というのは大勢がいっせいにドッと笑う状態であって、1人で爆笑することなど論理的に不可能なのだそうだ。
まあそんな日本語的な事情はありつつも、心情的にはここは爆笑と書きたい。こんなにAppleScriptを強く勧める文章に出くわしたのは初めてのことだし、Appleの人間もこんなことは言わない(彼らは割と控えめだ)。強力にお勧めしているのがマイクロソフトだというのがツボである。
VisualBasicのマクロをExcel 2004で開いて、その内容を調査。本当は、Excel 2008でオープンして、文字列としてマクロを取り出せないかと試行錯誤していたのだが、そういうオブジェクトは定義されていないため、AppleScript側からVisualBasicマクロを文字列として取り出す、とかいう大胆不敵な真似はどうやらできないらしい(惜しい! VBマクロの自動変換AppleScriptを作れるんじゃないかと思っていたのに)。
……で、しばらくVBのドットシンタックスのプログラムに目を慣らしてから、よーーく内容を吟味してみると……
分かる。意味が分かる。そして、AppleScriptに置き換えられる。
たとえば、
Application.CutCopyMode = False
なんてVBのプログラムがあった場合、AppleScriptでは……
tell application "Microsoft Excel"
set cut copy mode to false
end tell
と書き換えられる。この程度なら、そのまんま置き換え可能な感じがする(まだ突っ込んだところまで触っていないが)。
ただ単に各種オブジェクトへの操作を行っているような、テクニックに走っていないVBマクロなら、けっこー簡単に置き換えられるのではないだろうか。こういう用例をいろいろと蓄え、書き換えを楽に行えるように準備していきたいものである。
ただ、ASに置き換えると……実行速度は低下するかもしれない。このあたりはExcelなりOfficeアプリ側がどういう対応をしているかによる。ASの命令を実行中に律儀にGUIフィードバックを行っていれば速度は低下するし、すべてのUIフィードバックを切っていれば、それなりに高速に実行可能だ。
結果は、神のみぞ知る。