エクセルVBAからパワーポイントのオブジェクト型を宣言する
エクセル上のクロス集計表から1万個以上の円グラフを作ってそれをパワーポイントのひな形にはりつけてくれみたいな依頼があり、VBAでパワーポイントを操作した時のメモ。
VBAは本当によくわからないんだけど、こういった処理をやるにはやっぱ欠かせない。
エクセルVBAでグラフを作るまでの処理は、エクセル上でできるからいいとして、問題はパワーポイントをどうやってエクセルから操作するか。
まず参照設定でパワーポイントのオブジェクトライブラリーを参照する。
これは必須。これによりVBE上に入力候補が表示されるようになる。かつ、よりVBAぽい書き方ができるようになる。
参照設定をしないでCreateObjectを使ってもできるが、その場合は型の宣言や操作ができない。
まず、パワーポイントのインスタンスを作る。
Dim myppt As PowerPoint.Application
Set myppt = New PowerPoint.Application
ここでエラーがでるようなら参照設定が上手く行っていない。
そして次にプレゼンテーションの宣言
Dim mypst As Presentation
Set mypst = myppt.Presentations.Open("C:\User\xxxxxxx.pptx")
相対パスの場合はカレントディレクトリを参照する。
これでプレゼンテーションが立ち上がる。
この後ハマったのがエクセルVBAからのパワーポイントのオブジェクト型の宣言。
Shape型の宣言について
Dim myShape As Shape
としても例えば
For Each myShape In mypst.Slide(1).Shapes
でエラーとなる。
これは
Dim myShape As PowerPoint.Shape
とPowerPointをShapeの前に加える必要がある。
どうもいろいろ調べたところ参照設定でエクセルとパワーポイントのオブジェクトライブラリを参照しているから、エクセルのShapeか、パワーポイントのShapeかを区別しなくてはいけないらしい。
PresentationオブジェクトやSlideオブジェクトはパワーポイント特有のオブジェクトなので特に
Dim mypst As PowerPoint.Presentation
としなくても
Dim mypst As Presentation
でいいようだ。
もちろん前者でも問題ない。
これでエクセルからパワーポイントのオブジェクト型の操作ができるようになる。
よくわからない場合は
DIm myShape As Object
を使ってしまえば楽ちんなんだけど、いかにもパワーポイントのことはよく知りませんみたいな感じで嫌いなので。これでVBAぽく書ける。