hiroshi akutsuの日記

主にプログラミング関係のこと

エクセル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")

 

FileNameのところは絶対パス相対パス

相対パスの場合はカレントディレクトリを参照する。

これでプレゼンテーションが立ち上がる。

 

この後ハマったのがエクセル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ぽく書ける。