マクロ呼び出し元の図形・画像を取得するには

図形や画像をクリックすることで登録したマクロ呼び出すことができます。Application.Caller は、その呼び出し元をたどることができる便利なプロパティです。

なぜ便利なのかというと、一つのマクロを複数の図形・画像に登録することで次のようなことができるからです。

呼び出し元の図形・画像に応じて異なる処理を行う

呼び出し元の図形・画像自体を処理する(ほかの図形・画像は処理しない)

Application.Caller プロパティで呼び出し元の図形・画像を取得する

Dim nameShp As String
Dim oShp As Shape

On Error Resume Next
nameShp = Application.Caller
If Err.Number <> 0 Then Exit Sub
On Error GoTo 0

Set oShp = ActiveSheet.Shapes(nameShp)
Application.Caller プロパティの値

図形・画像から呼び出されると、Application.Callerは図形・画像の名前を返します。

[マクロ]ダイアログボックスなどから直接実行された場合は #REF! が返ります。上記コードではString型に対してエラーになるので、On Error で処理をスキップするようにしています。

図形・画像の名前は、「楕円 2」や「図 3」などが付けられています。[選択と検索]-[オブジェクトの選択と表示]から確認・変更できます。
図形・画像の操作とイベント

ユーザーが特定箇所を操作したらマクロ処理をするような場合、通常はイベントプロシージャを利用します。ダブルクリック(SheetBeforeDoubleClick)や右クリック(SheetBeforeRightClick)を捕捉して、Targetオブジェクトで操作対象の特定もできます。

しかし、操作対象が図形・画像の場合、こうしたイベントは発生しないのです。マクロが発動した後で元をたどるしかないというわけです。


このマクロを応用した例がこちらです。

 

タイトルとURLをコピーしました