Mutable_Yunの業務改善ブログ

業務改善や生産性向上のブログです。自動化の手段として、VBAやRPAの勉強に役立つ解説をしています。

VBA OLEオートメーションで別のアプリケーションを動かす① OLEの目的と概念

OLEオートメーションを使ってエクセル以外のアプリケーションを動かす方法を学ぶシリーズの1回目です。以降、単にOLEと呼びます。プログラミングを学習には、まず手を動かすことが大事です。しかし、オブジェクト指向、OLE、APIの3つに関しては、まずは概念を学ぶのが結果的に早いと感じています。今回はOLEオートメーションを確実に身に付けるための第一歩、OLEのについて解説していきます。

この記事は二段です。クラスやオブジェクトの概念が理解出来ていることを前提に解説を進めていきます。

レベルについてはExcel VBAの実力(レベル)を定義してみる 初心者~三段をご参照ください。

目次

OLEとは

OLEは Object Linking and Embeddingの略です。OLEはWindowsの他のアプリケーションを動かすための規格(または技術、やり方、方法。)です。それではその概念について学んでいきましょう。

OLEの目的

OLEの目的は、簡単に言えば「エクセルVBAでメールを送る機能を実現したい」という思いを実現する為の規格(または技術、やり方、方法。)です。

当たり前ですが、エクセルはエクセルアプリケーションの持っているオブジェクトしか操作できません。つまり、エクセルVBAで操作できるオブジェクトはエクセルアプリケーションが持っているオブジェクト(例えばSheets)とVBAで定義したクラスから生成したインスタンスのみです。

Outlookが持っているオブジェクトは操作できません。Outlookが持っているオブジェクトの一つがメールですね。MailItemオブジェクトと言います。このMailItemオブジェクトのようなWindowsの別のアプリケーションが持っているオブジェクトを操作できるようにする事がOLEの目的です。

OLEの概念

ちょっとだけオブジェクト指向を復習

二段の皆さんは身に付けているオブジェクト指向を意識しましょう。クラスモジュールでクラスを自分で定義する理由は機能とデータを持ったオブジェクトを設計するためでした。標準モジュールを利用する目的は、オブジェクトの機能を呼び出すことでしたね。処理内容(=機能)を記述するクラスモジュールと処理の流れをコントロールする標準モジュールに分けるのがオブジェクト指向でした。

OLEの概念はオブジェクト指向そのもの

前述の「エクセルVBAでメールを送る機能を実現したい」を実現するためにはOutlookが持っているクラスからエクセルVBAの標準モジュールでインスタンスを生成する必要があります。

OLEが他のWindowsのアプリケーションを操作したいと言う事は、言い換えれば他のアプリケーションのクラスを使う、と言う事です。

クラスモジュールでは自分独自のクラスを使っていました。今回は自分でクラスモジュールでクラスを記述するのでは無く、他のアプリケーションが用意したクラスを拝借します。必要なメソッドやプロパティは既にそのクラスの中に入っているために、エクセルVBAの標準モジュールはインスタンスを生成するだけで、その機能(メソッド)やデータ(プロパティ)を利用することができます。

次回の記事に進む前に

次回の記事では、実際にOLEを使って他のアプリケーションを操作する為の記述の仕方を勉強します。オブジェクト指向が良く理解出来ていない人は、次に進む前にオブジェクト指向について復習しておきましょう。

よく分からないまま前に進むと、コピペ人間で終わってしまう可能性があります。オブジェクト指向が分かっていれば、要するにOLEとはクラスを自分で作るのでは無く、他のアプリケーションから借りてくるだけだ、という事が分かるので、すんなりマスターすることができます。

オブジェクト指向に不安がある方は下記で予め復習しておきましょう。この3つを読めば、オブジェクト指向の概要は完全に理解出来ます。

②ではInternet Explorerでウェブサイトを表示させる例でOLEの具体的な書き方を学んでいきます