title1
navigation bar3



[ 1 | 2 | 3 |4 |5 | 6 | 7 | 8 | 9 | 10-p1 | 10-p2 | 10-p3 | 11 | 12 ] [日経マック連載Index ]



連載[10-3] Visual Basicと対決〜実はそっくり!


《 VBAとAppleScriptの同時レコーディングが可能 》
?
でも先生、AppleScriptのプログラムをVBAで書き直すのって結構大変じゃありませんか。
先生
実はとっておきの技があるんだ。
?
えっ、まさか自動変換機能があるとか。
先生
いや、両方のプログラムを自動的に生成してしまう機能さ。Excel 5.0にはマクロの自動記録機能があるだろ。
?
実際に行った操作をマクロとして記録する機能ですね。
先生
バージョン5.0でVBAに変わっても、この「レコーディング」機能は使えるんだ。そしてAppleScriptにも、同様のレコーディング機能がある。
?
確か、スクリプト編集プログラムで「記録」ボタンを押すと実際に行った操作をAppleScriptとして記録するんでした。
先生
そのためにはアプリケーションが「レコーダブル」対応である必要があるんだけど、Excel 5.0はそうだからね。
?
と言うことは先生。
先生
お察しの通りだ。AppleScriptとVBAの両者でレコーディング機能を同時にスタートさせておいてから、手作業であれこれ操作を行うと、同じ動作をするVBAとAppleScriptのプログラムが同時に出来上がるんだ(図4)。
図4 VBAとAppleScriptを同時にレコーディング
図4VBAとAppleScriptを同時にレコーディング
?
えぇっ、それはひょっとしてそれは大変なことでは。
先生
そう、光子さんと映見さんが両方GETできるんだよ。
?
光子さんは遠慮します。あの歳でまだコメディーしてますからね。
TOP

《 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オートメーションの機能を加えてしまうんだな。
MicrosoftOLEAutomation
?
機能拡張によって、マックにWindowsと同じ仕組みを設けてしまうわけですか。う〜ん、マイクロソフトの手でマックがWindows化されてしまうなんて…。
先生
でもWindowsとマックを両方使っている会社なんかは助かるだろうね。まぁ、それはさておき。
このExcel 5.0のVBAを見てごらん。
Excel5.0VBAの例
?
何ですか、これは。
先生
まぁ、実行してごらん。
?
あっ、Microsoft Wordに新しい書類が出来て…、あれあれ、Wordが勝手に動き出して、「こんにちはWordくん」だって。文字が選択されてフォントやサイズがみるみる変わって行きます。
OLEオートメーション例
先生
これがOLEオートメーションさ。Excel 5.0のVBAでWord 6.0を自動操作したんだ。
TOP

《 MS-Wordの「Word Basic」オブジェクトに命令 》
?
しかし、さっきのプログラムの意味が全然分かりませんよ。
先生
ポイントは、

  wordBasicObj = CreateObject("Word.Basic")

ってところだな。これでMicrosoft Wordを、VBAのオブジェクトとして扱えるようにしたんだ。そして、
  With wordBasicObj
   .FileNew
   .Insert "Hello Word !"
   .InsertPara
   .Insert "こんにちは,Wordくん"
   .InsertPara
   .Insert "僕はExcelさっ!"
   .EditSelectAll
   .Font("平成角ゴシック")
   .FontSize(36)
   .Bold
   .Itaric
  End With

ではさまれた部分で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といったマイクロソフト製品のほか、大物では「一太郎」くらいかな。
?
ぜひその辺の話も含めて教えて下さい。できればその後で、実際にシステムを作ってみてどうだったのか,みたいなお話もあるとうれしいんですが。
先生
うん。今ちょっとコンサルティングしているプロジェクトがあるから、その進行具合ではそうしたことも話せるかもね。再来月になってしまうかも知れないが。
?
じゃ、乞うご期待、ということで、今日はありがとうございました。

TOP

AppleScript救急隊事務局(ASQs) info-asqs@fsight.co.jp

主催 株式会社フォーサイト   後援 アップルコンピュータ株式会社

(c)1996-2013 The ForeSight Inc. All rights reserved.Appleは、米国アップルコンピュータ社の登録商標です。
AppleScriptは、米国アップルコンピュータ社の商標です。
その他記載の会社名・製品名・ソフトウェア名は一般にその会社の登録商標または商標です。