「excel vba ppt activeshape.name」
という検索で、このサイト・インストラクターのネタ帳へのアクセスがあることに気づきました。
PowerPoint上のアクティブなShapeの名前を取得する、Excel VBA(Visual Basic for Applications)のコードを探している方による検索です。
PowerPointにActiveShapeプロパティは存在しない
「excel vba ppt activeshape.name」
という検索をなさった方は、PowerPointに「ActiveShape」という名前の、アクティブな図形を取得するプロパティ等があると想像していらしたのでしょうけれど、そのようなプロパティは存在しません。
PowerPointのVBE(Visual Basic Editor)でオブジェクトブラウザーを表示して「active」という単語を検索してみると、下図のような状態になります。
「active」という単語の含まれるプロパティがいくつかヒットしていますが、「ActiveShape」は見当たりません。
ExcelにもActiveShapeプロパティは存在しない
ちなみに、Excelにも「ActiveShape」という名前のプロパティは存在していません。
ExcelのVBEでオブジェクトブラウザーを表示して「active」という単語を検索してみると、下図のような状態になります。
PowerPointと同じく「active」という単語の含まれるプロパティが複数ヒットしていますが、やっぱり「ActiveShape」は存在しません。
PowerPoint上で選択されている図形の名前をExcel VBAで取得するサンプルマクロ
結局、PowerPoint上で選択されているShapeの名前をExcel VBAで取得するには、既にご紹介している選択されている図形の名前を取得するPowerPointマクロと同じ処理を、Excel VBAから行ってやる必要があります。
Const ppSelectionNone = 0
Const ppSelectionSlides = 1
Dim ppt As Object ' PowerPoint.Application
Dim slt As Object ' PowerPoint.Selection
Dim shp As Object ' PowerPoint.Shape
On Error GoTo ErrHndl
Set ppt = GetObject(Class:="PowerPoint.Application")
Set slt = ppt.ActiveWindow.Selection
If slt.Type = ppSelectionNone _
Or slt.Type = ppSelectionSlides Then
Err.Raise _
Number:=9999, _
Description:="PowerPoint上でShapeが選択されていません。"
End If
For Each shp In slt.ShapeRange
MsgBox shp.Name
Next shp
GoTo EndTask
ErrHndl:
Select Case Err.Number
Case 9999
MsgBox Err.Description
Case 429
MsgBox "PowerPointが起動していません。"
Case -2147188160
MsgBox "PowerPointファイルが開かれていません。"
Case Else
MsgBox Err.Description & vbCrLf & Err.Number
End Select
Err.Clear
GoTo EndTask
Set shp = Nothing
Set slt = Nothing
Set ppt = Nothing
End Sub
PowerPoint上でいずれかの図形を選択しておいて上記のマクロを実行すると、選択されていた図形の名前がメッセージボックスに表示されます。
サンプルマクロの解説
実際に名前を取得しているのは、
For Each shp In slt.ShapeRange
MsgBox shp.Name
Next shp
の部分です。
これだけの処理をExcel VBAから行うために、さまざまなコードが追加されています。
まず、起動しているPowerPointのApplicationオブジェクトを、オブジェクト変数・pptにセットしておいて、
Set ppt = GetObject(Class:="PowerPoint.Application")
つづいて、PowerPointのDocumentWindowオブジェクトのSelectionプロパティでSelectionオブジェクトを取得して、オブジェクト変数・sltにセットしています。
Set slt = ppt.ActiveWindow.Selection
選択されているのがShapeではなかったときにはメッセージを表示するようにしています。
If slt.Type = ppSelectionNone _
Or slt.Type = ppSelectionSlides Then
Err.Raise _
Number:=9999, _
Description:="PowerPoint上でShapeが選択されていません。"
ここで利用している定数・ppSelectionNoneとppSelectionSlidesは、参照設定が行われていないことを考慮して、このプロシージャの冒頭で宣言しています。
Const ppSelectionNone = 0
Const ppSelectionSlides = 1
実行時エラーの発生する可能性がいろいろとありますので、
ErrHndl:
以下にエラー処理をまとめています。
Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » PowerPoint上で選択されているShapeの名前を取得するExcelマクロ