|
《 VBAとAppleScriptの同時レコーディングが可能
》
|
|
|
?
|
でも先生、AppleScriptのプログラムをVBAで書き直すのって結構大変じゃありませんか。 |
|
先生
|
実はとっておきの技があるんだ。 |
|
?
|
えっ、まさか自動変換機能があるとか。 |
|
先生
|
いや、両方のプログラムを自動的に生成してしまう機能さ。Excel 5.0にはマクロの自動記録機能があるだろ。 |
|
?
|
実際に行った操作をマクロとして記録する機能ですね。 |
|
先生
|
バージョン5.0でVBAに変わっても、この「レコーディング」機能は使えるんだ。そしてAppleScriptにも、同様のレコーディング機能がある。 |
|
?
|
確か、スクリプト編集プログラムで「記録」ボタンを押すと実際に行った操作をAppleScriptとして記録するんでした。 |
|
先生
|
そのためにはアプリケーションが「レコーダブル」対応である必要があるんだけど、Excel 5.0はそうだからね。 |
|
?
|
と言うことは先生。 |
|
先生
|
お察しの通りだ。AppleScriptとVBAの両者でレコーディング機能を同時にスタートさせておいてから、手作業であれこれ操作を行うと、同じ動作をするVBAとAppleScriptのプログラムが同時に出来上がるんだ(図4)。 |
|
図4 VBAとAppleScriptを同時にレコーディング
![]() |
|
|
?
|
えぇっ、それはひょっとしてそれは大変なことでは。 |
|
先生
|
そう、光子さんと映見さんが両方GETできるんだよ。 |
|
?
|
光子さんは遠慮します。あの歳でまだコメディーしてますからね。 |
|
《 VBAでほかのアプリケーションに命令できる?
》
|
|
|
?
|
VBAを使ってExcelからほかのアプリケーションに命令を送ることはできるんでしょうか。 |
|
先生
|
う〜ん、いい質問だ。実はそれがただの「Visual Basic」と「VBA(Visual Basic for Applications)」の大きな違いなんだ。VBAでは、「OLEオートメーション」に対応したほかのアプリケーションのオブジェクトを操作することができるんだ。 |
|
?
|
OLEオートメーション? |
|
先生
|
Windowsでアプリケーションを自動化するためのアーキテクチャーさ。 |
|
?
|
AppleScriptみたいなものでしょうか。 |
|
先生
|
ちょっと違うね。私はAppleScriptのベースとなっているマックのOSA(Open Scripting Architecture)がOLEオートメーションに相当すると思うんだが。まぁ、詳しい説明は後にしよう。取りあえず実例を見てもらおうか。 |
|
?
|
実例って、Windowsでですか。 |
|
先生
|
いや、マックでだよ。 |
|
?
|
マックでもOLEオートメーションが使えるんですか。 |
|
先生
|
Excel 5.0をインストールすると、機能拡張フォルダに「Microsoft OLE
Automation」とかたくさんファイルができるだろう。こうした機能拡張によって、Excel 5.0はマックのシステムにOLEオートメーションの機能を加えてしまうんだな。
|
|
?
|
機能拡張によって、マックにWindowsと同じ仕組みを設けてしまうわけですか。う〜ん、マイクロソフトの手でマックがWindows化されてしまうなんて…。 |
|
先生
|
でもWindowsとマックを両方使っている会社なんかは助かるだろうね。まぁ、それはさておき。 このExcel 5.0のVBAを見てごらん。 |
![]() |
|
|
?
|
何ですか、これは。 |
|
先生
|
まぁ、実行してごらん。 |
|
?
|
あっ、Microsoft Wordに新しい書類が出来て…、あれあれ、Wordが勝手に動き出して、「こんにちはWordくん」だって。文字が選択されてフォントやサイズがみるみる変わって行きます。 |
![]() |
|
|
先生
|
これがOLEオートメーションさ。Excel 5.0のVBAでWord 6.0を自動操作したんだ。 |
|
《 MS-Wordの「Word
Basic」オブジェクトに命令 》
|
|
|
?
|
しかし、さっきのプログラムの意味が全然分かりませんよ。 |
|
先生
|
ポイントは、
wordBasicObj = CreateObject("Word.Basic") ってところだな。これでMicrosoft Wordを、VBAのオブジェクトとして扱えるようにしたんだ。そして、 ではさまれた部分でWordに命令しているんだよ。 |
|
?
|
「Insert」は文字の挿入。「InsertPara」は改行かな? フォントを平成角ゴシックにしてサイズを36ポイント、ボールド、イタリックに…何となく意味は分かりますよ。Word 6.0にVBAの命令を送っているわけですね。 |
|
先生
|
いや。この「With wordBasicObj 〜 End With」ではさまれた部分はVBAじゃないんだ。Word 6.0ではVBAは使えない。 |
|
?
|
でもVBAっぽいコマンドが書いてあるじゃないですか。 |
|
先生
|
これはWord Basicって言うWord独自のマクロ言語さ。 |
|
?
|
Word Basic? VBAとは違うんですか。 |
|
先生
|
これが違うんだな。実はこのプログラムはMicrosoft Wordというアプリケーション・オブジェクトではなく、Word Basicというオブジェクトに命令しているんだよ。 |
|
?
|
??? |
|
先生
|
この辺りの仕組みを理解するには、OLEやOLEオートメーションに関する知識が必要だな。まぁ今日は簡単にVBAの概要を紹介してみたが、あんまり詳しい説明ができなかったんで、来月はもう少し細かく技術的な比較をしてみようか。 |
|
?
|
あんまり専門的な話はいやですよ、先生。 |
|
先生
|
分かってるって。次回はWindowsとマックのOSレベルのスクリプティング・アーキテクチャーを比較してみるとか、Windowsにおけるアプリケーション自動操作の実態とか、そんなあたりを中心に説明しよう。OLEオートメーションのベースになる「OLE2」(オーレツー)そのものが、OpenDocと比べてどんなものなのか、とかもね。そういったかなり具体的な話ができれば、と思ってはいるんだ。 |
|
?
|
しかしWindowsの世界でも,AppleScript並みにソフトの自動化ができるとは驚きですねぇ。 |
|
先生
|
でも、いつもこううまく行くとは限らないんだよ。OLEオートメーションに対応しているソフトは、結構限られるんだ。Excel、Word、Accessといったマイクロソフト製品のほか、大物では「一太郎」くらいかな。 |
|
?
|
ぜひその辺の話も含めて教えて下さい。できればその後で、実際にシステムを作ってみてどうだったのか,みたいなお話もあるとうれしいんですが。 |
|
先生
|
うん。今ちょっとコンサルティングしているプロジェクトがあるから、その進行具合ではそうしたことも話せるかもね。再来月になってしまうかも知れないが。 |
|
?
|
じゃ、乞うご期待、ということで、今日はありがとうございました。 |
AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp