Home » エクセルマクロ・Excel VBAの使い方 » Office連携 » PowerPoint上で選択されているShapeの名前を取得するExcelマクロ

PowerPoint上で選択されているShapeの名前を取得するExcelマクロ

対象:Excel2007, Excel2010, Excel2013, Windows版Excel2016

「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」という単語を検索してみると、下図のような状態になります。

PowerPoint上で選択されている図形の名前を取得するExcelマクロ

「active」という単語の含まれるプロパティがいくつかヒットしていますが、「ActiveShape」は見当たりません。

ExcelにもActiveShapeプロパティは存在しない

ちなみに、Excelにも「ActiveShape」という名前のプロパティは存在していません。

ExcelのVBEでオブジェクトブラウザーを表示して「active」という単語を検索してみると、下図のような状態になります。

PowerPoint上で選択されている図形の名前を取得するExcelマクロ

PowerPointと同じく「active」という単語の含まれるプロパティが複数ヒットしていますが、やっぱり「ActiveShape」は存在しません。

PowerPoint上で選択されている図形の名前をExcel VBAで取得するサンプルマクロ

結局、PowerPoint上で選択されているShapeの名前をExcel VBAで取得するには、既にご紹介している選択されている図形の名前を取得するPowerPointマクロと同じ処理を、Excel VBAから行ってやる必要があります。

Sub PowerPoint上で選択されているShapeの名前を取得する()

 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

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マクロ

「Office連携」の記事一覧

検索


Copyright © インストラクターのネタ帳 All Rights Reserved.

.