ブック、シート、セルなどの操作に比べると、シェイプの操作に関する情報はまだまだ少なく、ある程度コツをつかむまではマクロ記録で調べながらの対応となる。
Excelのマクロの記録は優秀で、シェイプに行った操作も逐一記録してくれる。
しかしWordのマクロの記録は申し訳程度のものでシェイプの操作は記録してくれない。PowerPointに至ってはそもそもマクロの記録機能自体なくなってしまった。
そこでExcelで記録したシェイプの操作をPowerPointやWordに移植しようと考える。
Excel、Word、PowerPointにはそれぞれオートシェイプ機能が備わっており、大体同じように使用できる。
また、これらのシェイプを相互にコピー&ペーストすることも可能だ。
ならばVBAのコードもそのまま移植できるはず!
…と思ったら大間違いで、実はExcel・Word・PowerPointのシェイプはそれぞれ別物だ。概ね同じようなメソッド・プロパティを備えているため、シェイプ操作の大部分は流用できるのだが、あるプロパティがExcelのシェイプにはあって、PowerPointには無いなんてこともあるのでそのまま実行すると何かしらエラーになることが多い。
VBAでExcel以外のシェイプを操作しようとすると、この違いでハマりやすいので、今回はアプリケーションごとのシェイプが持つ機能をオブジェクトブラウザーで調べる方法について書こうと思う。
まずExcelのVBEからWordとPowerPointを参照設定しておく。
次に表示メニューか、F2キーでオブジェクトブラウザーを起動する。
オブジェクトブラウザーの余白で右クリックし、完全に一致する単語だけを検索にチェックを入れておく。
そして、コンボボックスから「すべてのライブラリ」を選んだ状態で、Shapeと入力し、Enterで検索する。
すると、Excel、PowerPoint、WordにそれぞれShapeクラスが表示される。
アプリごとの固有のプロパティを一つ選んで赤線を引いてみた。
特にハマリやすいのは、ShapeのTextFrameプロパティである。ExcelやPowerPointのシェイプにはTextFrameの他に、TextFrame2というプロパティが備わっており、TextFrame2の方が設定できるプロパティが多い。しかしWordにはTextFrame2は用意されておらず、設定項目は全てTextFrameにまとまっている。
また、オブジェクトブラウザーからプロパティを選択すると、下のペインに簡単な情報が表示される。
図の例では、TextFrameプロパティは、TextFrame型のオブジェクトを返すことが分かる。
この緑色で書かれたTextFrameをクリックすると、TextFrameのメンバー一覧へジャンプできる。
なお、今回はアプリごとの比較だったのですべてのライブラリを選択したが、項目が多くなりすぎるので個別に調べたいときはライブラリを選択すると良い。WorkbookやWorksheet、RangeなどのExcelオブジェクトについてはExcelライブラリを、CollectionやVBA関数などはVBAライブラリを選択すると表示される。
たとえば定数「vbNewLine」を検索してみると、Constantsモジュールの中にあることが分かり、他にどんな定数があるのかも分かる。
なお、検索結果にクラスとなっているが、実際には標準モジュールである。
クラスモジュールか標準モジュールかは、アイコンでも判断できる。
プロジェクトエクスプローラーで使用されているのと同じアイコンだ。
オブジェクトブラウザーを使いこなすとかなりマクロ作成が捗るので、まだ使いこなせていない方は以下のサイトで使い方を押さえておくと良いと思う。
nasunoblog.blogspot.jp