COM経由でインスタンス生成という話
- (2012-04-29 06:46:34)
Excel = CreateOleObj("Excel.Application")
すでにExcelが開かれている場合なら
Excel = GetActiveOleObj("Excel.Application")
オマジナイとして書く
「そういうもの」として、オマジナイ的に書いている。
はたとこの意味は?と今日考えてみた。
ネットで引くとこの部分を「COM経由でインスタンス生成」と表現している人がいる。
Microsoft社の構想
COMとはMicrosoft社が開発したプログラム間通信環境のようだ。
今までOfficeの各アプリケーションは共通開発基盤のVBAがあるため「地下茎でつながっている」という印象を受けてきたが、VBAだけでなく、COMが実装されているからかもしれない。
たとえば、ExcelとAccessの間ではプログラムで相手アプリケーションを操作することもできる。はじめて知ったときMicrosoft社の構想は大きいと感動した。
たとえば、弥生会計からExcelがプログラムで操作できれば便利だな、なんてよく考えるが、弥生会計にそういう発想はないようだ。
弥生会計に限らず多くの独立系のアプリケーションソフトが単体使用を想定している。技術的な問題ではなく、政治的な問題だろうが、物足りない。
Microsoft社以外にも公開されているCOM
COMが提供する「地下茎でつながる」仕組みを利用すれば、Microsoft社以外のアプリケーションもExcelを外部から利用することができる。
UWSCでは下記構文を入れればExcelが利用できる。
Excel = CreateOleObj("Excel.Application")
オブジェクトをロードしてインスタンス生成
この構文の意味はCOMによって提供されているExcelオブジェクトをPCのメモリーにロードして、UWSCから使える状態にします → インスタンスの生成
と解釈した。
インスタンスとは事例という意味なので、この場合、いろいろ使えるオブジェクトを具体的にUWSCで使える状態にしました、くらいの意味か。
この推理が正しいなら、("Excel.Application")はExcelオブジェクト(プログラム体)を意味するが、この場合、パスは指定しなくてもいいのだろうか?とか、オブジェクトはファイル名とは違うのか、などまだいろいろ疑問は残っている。
奥は深そうなので、深みにはまる前にこれくらいで。